@mondaydotcomorg/agent-toolkit 2.16.1 → 2.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/index.js +12 -12
- package/dist/cjs/core/index.js.map +1 -1
- package/dist/cjs/mcp/index.js +12 -12
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/openai/index.js +20 -20
- package/dist/cjs/openai/index.js.map +1 -1
- package/dist/esm/core/index.js +12 -12
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/mcp/index.js +12 -12
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/openai/index.js +22 -22
- package/dist/esm/openai/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/core/index.js
CHANGED
|
@@ -1072,7 +1072,7 @@
|
|
|
1072
1072
|
is_guest
|
|
1073
1073
|
}
|
|
1074
1074
|
}
|
|
1075
|
-
`;const nT=e=>{const a=[];return"users"in e&&e.users&&e.users.length>0&&(a.push("Users:"),e.users.forEach((e=>{e&&(a.push(` ID: ${e.id}`),a.push(` Name: ${e.name}`),a.push(` Email: ${e.email}`),a.push(` Title: ${e.title||"N/A"}`),a.push(` Enabled: ${e.enabled}`),a.push(` Admin: ${e.is_admin||!1}`),a.push(` Guest: ${e.is_guest||!1}`),a.push(` Pending: ${e.is_pending||!1}`),a.push(` Verified: ${e.is_verified||!1}`),a.push(` View Only: ${e.is_view_only||!1}`),a.push(` Join Date: ${e.join_date||"N/A"}`),a.push(` Last Activity: ${e.last_activity||"N/A"}`),a.push(` Location: ${e.location||"N/A"}`),a.push(` Mobile Phone: ${e.mobile_phone||"N/A"}`),a.push(` Phone: ${e.phone||"N/A"}`),a.push(` Timezone: ${e.time_zone_identifier||"N/A"}`),a.push(` UTC Hours Diff: ${e.utc_hours_diff||"N/A"}`),e.teams&&e.teams.length>0&&(a.push(" Teams:"),e.teams.forEach((e=>{e&&a.push(` - ID: ${e.id}, Name: ${e.name}, Guest Team: ${e.is_guest||!1}`)}))),a.push(""))}))),"teams"in e&&e.teams&&e.teams.length>0&&(a.push("Teams:"),e.teams.forEach((e=>{e&&(a.push(` ID: ${e.id}`),a.push(` Name: ${e.name}`),function(e){return"owners"in e}(e)&&(a.push(` Guest Team: ${e.is_guest||!1}`),a.push(` Picture URL: ${e.picture_url||"N/A"}`),e.owners&&e.owners.length>0&&(a.push(" Owners:"),e.owners.forEach((e=>{a.push(` - ID: ${e.id}, Name: ${e.name}, Email: ${e.email}`)}))),e.users&&e.users.length>0&&(a.push(" Members:"),e.users.forEach((e=>{e&&a.push(` - ID: ${e.id}, Name: ${e.name}, Email: ${e.email}, Title: ${e.title||"N/A"}, Admin: ${e.is_admin||!1}, Guest: ${e.is_guest||!1}`)})))),a.push(""))}))),0===a.length?"No users or teams found with the specified filters.":a.join("\n").trim()},oT=500,sT=500,pT=1e3,rT={userIds:e.z.array(e.z.string()).max(oT).optional().describe('[HIGH PRIORITY] Specific user IDs to fetch (max 500). ALWAYS use this when you have user IDs from board assignments, mentions, previous queries, or any context where user IDs are available.\n \n AI AGENT DIRECTIVE: This is the MOST EFFICIENT parameter. Use whenever you have specific user IDs - never use broad searches when IDs are available.\n \n RETURNS: Complete user profiles with team memberships. EXAMPLES: ["12345678", "87654321"]'),teamIds:e.z.array(e.z.string()).max(sT).optional().describe('[HIGH PRIORITY] Specific team IDs to fetch (max 500). ALWAYS use this when you have team IDs from board permissions, assignments, team context or elsewhere.\n \n AI AGENT DIRECTIVE: Use with teamsOnly: true for teams without user data, or includeTeamMembers: true for detailed member analysis. NEVER fetch all teams when specific IDs are available.\n \n RETURNS: Team details with owners and optional member data. EXAMPLES: ["98765432", "11223344"]'),name:e.z.string().optional().describe('[SECOND PRIORITY] Name-based user search. STANDALONE parameter - cannot be combined with others.\n \n AI AGENT DIRECTIVE: Use ONLY when you have user names but no IDs. This is your PREFERRED method for finding users when you know names. Performs fuzzy matching.\n \n CRITICAL: This parameter CONFLICTS with all others. EXAMPLES: "John Smith", "john", "smith"'),getMe:e.z.boolean().optional().describe('[TOP PRIORITY] Current authenticated user lookup. STANDALONE parameter - cannot be combined with others.\n \n AI AGENT DIRECTIVE: Use ALWAYS when requesting current user information. Returns basic profile: id, name, title, enabled, is_admin, is_guest. Should be used when a user asks to get "my user" or "me".\n \n CRITICAL: This parameter CONFLICTS with all others. Pass boolean value true (not string "true") for authenticated user\'s basic details.'),includeTeams:e.z.boolean().optional().describe("[AVOID UNLESS NECESSARY] Include general teams data alongside users. Creates dual query overhead. This does not fetch a specific user's teams rather all teams in the account. To fetch a specific user's teams just fetch that user by id and you will get the team memberships.\n \n AI AGENT DIRECTIVE: AVOID this parameter unless you specifically need both users AND teams in one response. Use teamsOnly: true for teams-only queries instead.\n \n PERFORMANCE WARNING: Adds significant query overhead. Use sparingly."),teamsOnly:e.z.boolean().optional().describe("[RECOMMENDED FOR TEAMS] Fetch only teams, no users returned. Optimized single-purpose query.\n \n AI AGENT DIRECTIVE: Use teamsOnly: true when you only need team information. More efficient than includeTeams: true. Combine with includeTeamMembers for member details.\n \n USAGE: teamsOnly: true for team lists, add includeTeamMembers: true for member analysis."),includeTeamMembers:e.z.boolean().optional().describe("[CONDITIONAL] Control team member data inclusion. Use strategically for performance.\n \n AI AGENT DIRECTIVE: Set to false for simple team lists (faster), true only when you need member composition analysis. Default is false for better performance.\n \n DECISION LOGIC: false=team names/IDs only, true=full member details with roles and permissions.")};const dT={itemId:e.z.number().describe("The id of the item to which the update will be added"),groupId:e.z.string().describe("The id of the group to which the item will be moved")};const lT=e.z.enum(["ids","object_ids","workspace_ids"])
|
|
1075
|
+
`;const nT=e=>{const a=[];return"users"in e&&e.users&&e.users.length>0&&(a.push("Users:"),e.users.forEach((e=>{e&&(a.push(` ID: ${e.id}`),a.push(` Name: ${e.name}`),a.push(` Email: ${e.email}`),a.push(` Title: ${e.title||"N/A"}`),a.push(` Enabled: ${e.enabled}`),a.push(` Admin: ${e.is_admin||!1}`),a.push(` Guest: ${e.is_guest||!1}`),a.push(` Pending: ${e.is_pending||!1}`),a.push(` Verified: ${e.is_verified||!1}`),a.push(` View Only: ${e.is_view_only||!1}`),a.push(` Join Date: ${e.join_date||"N/A"}`),a.push(` Last Activity: ${e.last_activity||"N/A"}`),a.push(` Location: ${e.location||"N/A"}`),a.push(` Mobile Phone: ${e.mobile_phone||"N/A"}`),a.push(` Phone: ${e.phone||"N/A"}`),a.push(` Timezone: ${e.time_zone_identifier||"N/A"}`),a.push(` UTC Hours Diff: ${e.utc_hours_diff||"N/A"}`),e.teams&&e.teams.length>0&&(a.push(" Teams:"),e.teams.forEach((e=>{e&&a.push(` - ID: ${e.id}, Name: ${e.name}, Guest Team: ${e.is_guest||!1}`)}))),a.push(""))}))),"teams"in e&&e.teams&&e.teams.length>0&&(a.push("Teams:"),e.teams.forEach((e=>{e&&(a.push(` ID: ${e.id}`),a.push(` Name: ${e.name}`),function(e){return"owners"in e}(e)&&(a.push(` Guest Team: ${e.is_guest||!1}`),a.push(` Picture URL: ${e.picture_url||"N/A"}`),e.owners&&e.owners.length>0&&(a.push(" Owners:"),e.owners.forEach((e=>{a.push(` - ID: ${e.id}, Name: ${e.name}, Email: ${e.email}`)}))),e.users&&e.users.length>0&&(a.push(" Members:"),e.users.forEach((e=>{e&&a.push(` - ID: ${e.id}, Name: ${e.name}, Email: ${e.email}, Title: ${e.title||"N/A"}, Admin: ${e.is_admin||!1}, Guest: ${e.is_guest||!1}`)})))),a.push(""))}))),0===a.length?"No users or teams found with the specified filters.":a.join("\n").trim()},oT=500,sT=500,pT=1e3,rT={userIds:e.z.array(e.z.string()).max(oT).optional().describe('[HIGH PRIORITY] Specific user IDs to fetch (max 500). ALWAYS use this when you have user IDs from board assignments, mentions, previous queries, or any context where user IDs are available.\n \n AI AGENT DIRECTIVE: This is the MOST EFFICIENT parameter. Use whenever you have specific user IDs - never use broad searches when IDs are available.\n \n RETURNS: Complete user profiles with team memberships. EXAMPLES: ["12345678", "87654321"]'),teamIds:e.z.array(e.z.string()).max(sT).optional().describe('[HIGH PRIORITY] Specific team IDs to fetch (max 500). ALWAYS use this when you have team IDs from board permissions, assignments, team context or elsewhere.\n \n AI AGENT DIRECTIVE: Use with teamsOnly: true for teams without user data, or includeTeamMembers: true for detailed member analysis. NEVER fetch all teams when specific IDs are available.\n \n RETURNS: Team details with owners and optional member data. EXAMPLES: ["98765432", "11223344"]'),name:e.z.string().optional().describe('[SECOND PRIORITY] Name-based user search. STANDALONE parameter - cannot be combined with others.\n \n AI AGENT DIRECTIVE: Use ONLY when you have user names but no IDs. This is your PREFERRED method for finding users when you know names. Performs fuzzy matching.\n \n CRITICAL: This parameter CONFLICTS with all others. EXAMPLES: "John Smith", "john", "smith"'),getMe:e.z.boolean().optional().describe('[TOP PRIORITY] Current authenticated user lookup. STANDALONE parameter - cannot be combined with others.\n \n AI AGENT DIRECTIVE: Use ALWAYS when requesting current user information. Returns basic profile: id, name, title, enabled, is_admin, is_guest. Should be used when a user asks to get "my user" or "me".\n \n CRITICAL: This parameter CONFLICTS with all others. Pass boolean value true (not string "true") for authenticated user\'s basic details.'),includeTeams:e.z.boolean().optional().describe("[AVOID UNLESS NECESSARY] Include general teams data alongside users. Creates dual query overhead. This does not fetch a specific user's teams rather all teams in the account. To fetch a specific user's teams just fetch that user by id and you will get the team memberships.\n \n AI AGENT DIRECTIVE: AVOID this parameter unless you specifically need both users AND teams in one response. Use teamsOnly: true for teams-only queries instead.\n \n PERFORMANCE WARNING: Adds significant query overhead. Use sparingly."),teamsOnly:e.z.boolean().optional().describe("[RECOMMENDED FOR TEAMS] Fetch only teams, no users returned. Optimized single-purpose query.\n \n AI AGENT DIRECTIVE: Use teamsOnly: true when you only need team information. More efficient than includeTeams: true. Combine with includeTeamMembers for member details.\n \n USAGE: teamsOnly: true for team lists, add includeTeamMembers: true for member analysis."),includeTeamMembers:e.z.boolean().optional().describe("[CONDITIONAL] Control team member data inclusion. Use strategically for performance.\n \n AI AGENT DIRECTIVE: Set to false for simple team lists (faster), true only when you need member composition analysis. Default is false for better performance.\n \n DECISION LOGIC: false=team names/IDs only, true=full member details with roles and permissions.")};const dT={itemId:e.z.number().describe("The id of the item to which the update will be added"),groupId:e.z.string().describe("The id of the group to which the item will be moved")};const lT={type:e.z.enum(["ids","object_ids","workspace_ids"]).describe("Query type of ids parameter that is used query by: ids, object_ids, or workspace_ids"),ids:e.z.array(e.z.string()).min(1).describe("Array of ID values for this query type (at least 1 required)"),limit:e.z.number().optional().describe("Number of docs per page (default: 25). Affects pagination - if you get exactly this many results, there may be more pages."),order_by:e.z.nativeEnum(Mb).optional().describe("The order in which to retrieve your docs. The default shows created_at with the newest docs listed first. This argument will not be applied if you query docs by specific ids."),page:e.z.number().optional().describe("The page number to return (starts at 1). Use this to paginate through large result sets. Check response for has_more_pages indicator.")};const cT={workspace_id:e.z.number().describe("The ID of the workspace to get information for")};const mT=yw`
|
|
1076
1076
|
query listWorkspaces($limit: Int!) {
|
|
1077
1077
|
workspaces(limit: $limit) {
|
|
1078
1078
|
id
|
|
@@ -1080,7 +1080,7 @@
|
|
|
1080
1080
|
description
|
|
1081
1081
|
}
|
|
1082
1082
|
}
|
|
1083
|
-
`,
|
|
1083
|
+
`,uT={};const fT=e.z.enum(["workspace","item"]),hT={location:e.z.discriminatedUnion("type",[e.z.object({type:e.z.literal(fT.enum.workspace).describe("Create document in workspace"),workspace_id:e.z.number().describe("Workspace ID under which to create the new document"),doc_kind:e.z.nativeEnum(wb).optional().describe("Document kind (public/private/share). Defaults to public."),folder_id:e.z.number().optional().describe("Optional folder ID to place the document inside a specific folder")}),e.z.object({type:e.z.literal(fT.enum.item).describe("Create document attached to item"),item_id:e.z.number().describe("Item ID to attach the new document to"),column_id:e.z.string().optional().describe("ID of an existing 'doc' column on the board which contains the item. If not provided, the tool will create a new doc column automatically when creating a doc on an item.")})]).describe("Location where the document should be created - either in a workspace or attached to an item"),doc_name:e.z.string().describe("Name for the new document."),markdown:e.z.string().describe("Markdown content that will be imported into the newly created document as blocks.")};const vT=yw`
|
|
1084
1084
|
mutation CreateDashboard(
|
|
1085
1085
|
$name: String!
|
|
1086
1086
|
$workspace_id: ID!
|
|
@@ -1102,14 +1102,14 @@
|
|
|
1102
1102
|
board_folder_id
|
|
1103
1103
|
}
|
|
1104
1104
|
}
|
|
1105
|
-
`,
|
|
1105
|
+
`,bT=yw`
|
|
1106
1106
|
query GetAllWidgetsSchema {
|
|
1107
1107
|
all_widgets_schema {
|
|
1108
1108
|
widget_type
|
|
1109
1109
|
schema
|
|
1110
1110
|
}
|
|
1111
1111
|
}
|
|
1112
|
-
`,
|
|
1112
|
+
`,gT=yw`
|
|
1113
1113
|
mutation CreateWidget($parent: WidgetParentInput!, $kind: ExternalWidget!, $name: String!, $settings: JSON!) {
|
|
1114
1114
|
create_widget(parent: $parent, kind: $kind, name: $name, settings: $settings) {
|
|
1115
1115
|
id
|
|
@@ -1121,13 +1121,13 @@
|
|
|
1121
1121
|
}
|
|
1122
1122
|
}
|
|
1123
1123
|
}
|
|
1124
|
-
`,
|
|
1124
|
+
`,yT={name:e.z.string().min(1,"Dashboard name is required").describe("Human-readable dashboard title (UTF-8 chars)"),workspace_id:e.z.string().describe("ID of the workspace that will own the dashboard"),board_ids:e.z.array(e.z.string()).min(1,"At least one board ID is required").max(50,"A maximum of 50 board IDs are allowed").describe("List of board IDs as strings (min 1 element)"),kind:e.z.nativeEnum(Fb).default(Fb.Public).describe("Visibility level: PUBLIC or PRIVATE"),board_folder_id:e.z.string().optional().describe("Optional folder ID within workspace to place this dashboard (if not provided, dashboard will be placed in workspace root)")};const wT={parent_container_id:e.z.string().describe("ID of the parent container (dashboard ID or board view ID)"),parent_container_type:e.z.nativeEnum(Jg).describe("Type of parent container: DASHBOARD or BOARD_VIEW"),widget_kind:e.z.nativeEnum(Gb).describe("Type of widget to create: i.e CHART, NUMBER, BATTERY"),widget_name:e.z.string().min(1,"Widget name is required").max(255,"Widget name must be 255 characters or less").describe("Widget display name (1-255 UTF-8 chars)"),settings:e.z.record(e.z.unknown()).describe("Widget-specific settings as JSON object conforming to widget schema. Use all_widgets_schema tool to get the required schema for each widget type.")};const xT=yw`
|
|
1125
1125
|
mutation updateWorkspace($id: ID!, $attributes: UpdateWorkspaceAttributesInput!) {
|
|
1126
1126
|
update_workspace(id: $id, attributes: $attributes) {
|
|
1127
1127
|
id
|
|
1128
1128
|
}
|
|
1129
1129
|
}
|
|
1130
|
-
`,
|
|
1130
|
+
`,_T={id:e.z.string().describe("The ID of the workspace to update"),attributes:e.z.object({accountProductId:e.z.number().optional(),description:e.z.string().optional(),kind:e.z.nativeEnum(Xg).optional(),name:e.z.string().optional()}).describe("Attributes to update in the workspace")};const TT=yw`
|
|
1131
1131
|
mutation updateFolder(
|
|
1132
1132
|
$folderId: ID!
|
|
1133
1133
|
$name: String
|
|
@@ -1153,7 +1153,7 @@
|
|
|
1153
1153
|
id
|
|
1154
1154
|
}
|
|
1155
1155
|
}
|
|
1156
|
-
`,
|
|
1156
|
+
`,ET={folderId:e.z.string().describe("The ID of the folder to update"),name:e.z.string().optional().describe("The new name of the folder"),color:e.z.nativeEnum(Yb).optional().describe("The new color of the folder"),fontWeight:e.z.nativeEnum(Qb).optional().describe("The new font weight of the folder"),customIcon:e.z.nativeEnum(Jb).optional().describe("The new custom icon of the folder"),parentFolderId:e.z.string().optional().describe("The ID of the new parent folder"),workspaceId:e.z.string().optional().describe("The ID of the workspace containing the folder"),accountProductId:e.z.string().optional().describe("The account product ID associated with the folder"),position:e.z.object({object_id:e.z.string().describe("The ID of the object to position the folder relative to"),object_type:e.z.nativeEnum(Eg).describe("The type of object to position the folder relative to"),is_after:e.z.boolean().optional().describe("Whether to position the folder after the object")}).optional().describe("The new position of the folder")};const NT=yw`
|
|
1157
1157
|
mutation createWorkspace(
|
|
1158
1158
|
$name: String!
|
|
1159
1159
|
$workspaceKind: WorkspaceKind!
|
|
@@ -1169,7 +1169,7 @@
|
|
|
1169
1169
|
id
|
|
1170
1170
|
}
|
|
1171
1171
|
}
|
|
1172
|
-
`,
|
|
1172
|
+
`,IT={name:e.z.string().describe("The name of the new workspace to be created"),workspaceKind:e.z.nativeEnum(Xg).describe("The kind of workspace to create"),description:e.z.string().optional().describe("The description of the new workspace"),accountProductId:e.z.string().optional().describe("The account product ID associated with the workspace")};const ST=yw`
|
|
1173
1173
|
mutation createFolder(
|
|
1174
1174
|
$workspaceId: ID!
|
|
1175
1175
|
$name: String!
|
|
@@ -1189,7 +1189,7 @@
|
|
|
1189
1189
|
id
|
|
1190
1190
|
}
|
|
1191
1191
|
}
|
|
1192
|
-
`,
|
|
1192
|
+
`,AT={workspaceId:e.z.string().describe("The ID of the workspace where the folder will be created"),name:e.z.string().describe("The name of the folder to be created"),color:e.z.nativeEnum(Yb).optional().describe("The color of the folder"),fontWeight:e.z.nativeEnum(Qb).optional().describe("The font weight of the folder"),customIcon:e.z.nativeEnum(Jb).optional().describe("The custom icon of the folder"),parentFolderId:e.z.string().optional().describe("The ID of the parent folder")};const DT=yw`
|
|
1193
1193
|
mutation updateBoardHierarchy($boardId: ID!, $attributes: UpdateBoardHierarchyAttributesInput!) {
|
|
1194
1194
|
update_board_hierarchy(board_id: $boardId, attributes: $attributes) {
|
|
1195
1195
|
success
|
|
@@ -1199,7 +1199,7 @@
|
|
|
1199
1199
|
}
|
|
1200
1200
|
}
|
|
1201
1201
|
}
|
|
1202
|
-
`,
|
|
1202
|
+
`,OT=yw`
|
|
1203
1203
|
mutation updateOverviewHierarchy($overviewId: ID!, $attributes: UpdateOverviewHierarchyAttributesInput!) {
|
|
1204
1204
|
update_overview_hierarchy(overview_id: $overviewId, attributes: $attributes) {
|
|
1205
1205
|
success
|
|
@@ -1209,7 +1209,7 @@
|
|
|
1209
1209
|
}
|
|
1210
1210
|
}
|
|
1211
1211
|
}
|
|
1212
|
-
`,RT={objectType:e.z.nativeEnum(Eg).describe("The type of object to move"),id:e.z.string().describe("The ID of the object to move"),position:e.z.object({object_id:e.z.string().describe("The ID of the object to position the object relative to"),object_type:e.z.nativeEnum(Eg).describe("The type of object to position the object relative to"),is_after:e.z.boolean().optional().describe("Whether to position the object after the object")}).optional().describe("The new position of the object. Required if changing the position based on another object."),parentFolderId:e.z.string().optional().describe("The ID of the new parent folder. Required if moving to a different folder."),workspaceId:e.z.string().optional().describe("The ID of the workspace containing the object. Required if moving to a different workspace."),accountProductId:e.z.string().optional().describe("The ID of the account product containing the object. Required if moving to a different account product.")};e.z.enum(["enable","disable","status","list","detailed","reset"]).describe('Action to perform: "list" or "detailed" to discover available tools, "status" to check current states, "enable" to activate needed tools, "disable" to deactivate tools, "reset" to restore defaults'),e.z.string().optional().describe("Name of the tool to manage (required for enable/disable/status/reset)");const CT=[class extends Zm{constructor(){super(...arguments),this.name="delete_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Delete Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1})}getDescription(){return"Delete an item"}getInputSchema(){return S_}async executeInternal(e){const a={id:e.itemId.toString()},t=await this.mondayApi.request(ww,a);return{content:`Item ${t.delete_item?.id} successfully deleted`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_items_by_name",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get items by board id and term"}getInputSchema(){return this.context?.boardId?$_:L_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),term:e.term},t=await this.mondayApi.request(xw,a);return{content:`Items ${t.boards?.[0]?.items_page?.items?.map((e=>`name: ${e.name}, id: ${e.id}`)).join(", ")} successfully fetched`}}},class extends Zm{constructor(){super(...arguments),this.name="create_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new item in a monday.com board"}getInputSchema(){return this.context?.boardId?x_:__}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),itemName:e.name,groupId:e.groupId,columnValues:e.columnValues},t=await this.mondayApi.request(_w,a);return{content:`Item ${t.create_item?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_update",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Update",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new update in a monday.com board"}getInputSchema(){return E_}async executeInternal(e){const a={itemId:e.itemId.toString(),body:e.body},t=await this.mondayApi.request(Tw,a);return{content:`Update ${t.create_update?.id} successfully created on item ${e.itemId}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_schema",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Schema",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get board schema (columns and groups) by board id"}getInputSchema(){if(!this.context?.boardId)return F_}async executeInternal(e){const a=this.context?.boardId??e.boardId,t={boardId:a.toString()},i=await this.mondayApi.request(Ew,t);return{content:`The current schema of the board ${a} is: \n \n\nColumns:\n ${i.boards?.[0]?.columns?.map((e=>`Id - ${e?.id}\n Title - ${e?.title}\n Type - ${e?.type}`)).join("\n")}\n \n\nGroups:\n ${i.boards?.[0]?.groups?.map((e=>`Id - ${e?.id}\n Title - ${e?.title}`)).join("\n")}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_activity",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Activity",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0}),this.defaultLimit=1e3}getDescription(){return"Get board activity logs for a specified time range (defaults to last 30 days)"}getInputSchema(){return O_}async executeInternal(e){const a=new Date,t=new Date(a.getTime()-Qm.MONTH30Days),i=e?.fromDate||t.toISOString(),n=e?.toDate||a.toISOString(),o={boardId:e.boardId.toString(),fromDate:i,toDate:n,limit:this.defaultLimit,page:1},s=await this.mondayApi.request(D_,o),p=s.boards?.[0]?.activity_logs;if(!p||0===p.length)return{content:`No activity found for board ${e.boardId} in the specified time range (${i} to ${n}).`};const r=p.filter((e=>null!=e)).map((e=>`• ${e.created_at}: ${e.event} on ${e.entity} by user ${e.user_id}${e.data?` - Data: ${e.data}`:""}`)).join("\n");return{content:`Activity logs for board ${e.boardId} from ${i} to ${n} (${p.length} entries):\n\n${r}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Info",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get comprehensive board information including metadata, structure, owners, and configuration"}getInputSchema(){return C_}async executeInternal(e){const a={boardId:e.boardId.toString()},t=await this.mondayApi.request(k_,a),i=t.boards?.[0];return i?{content:R_(i)}:{content:`Board with id ${e.boardId} not found or you don't have access to it.`}}},class extends Zm{constructor(){super(...arguments),this.name="get_users_by_name",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Users",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get users, can be filtered by name or partial name"}getInputSchema(){return M_}async executeInternal(e){const a={name:e.name},t=await this.mondayApi.request(Nw,a);return{content:`Relevant users:\n ${t.users?.map((e=>` id: ${e?.id}, name: ${e?.name}, title: ${e?.title}`)).join("\n")}`}}},class extends Zm{constructor(){super(...arguments),this.name="list_users_and_teams",this.type=exports.ToolType.READ,this.annotations=Xm({title:"List Users and Teams",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return'PRECISION-FIRST user and team retrieval tool. AI agents MUST prioritize specific queries over broad searches.\n\n MANDATORY BEST PRACTICES:\n 1. ALWAYS use specific IDs when available (userIds, teamIds) - highest precision and performance\n 2. ALWAYS use name search when you have user names but no IDs \n 3. ALWAYS use boolean getMe: true when requesting current user information\n 4. AVOID broad queries (no parameters) - use only as absolute last resort\n 5. COMBINE parameters strategically to minimize API calls\n\n REQUIRED PARAMETER PRIORITY (use in this order):\n 1. getMe: true (when requesting current user) - STANDALONE ONLY\n 2. name="exact_name" (when searching by name) - STANDALONE ONLY \n 3. userIds=["id1","id2"] (when you have specific user IDs)\n 4. teamIds=["id1","id2"] + teamsOnly: true (when you have specific team IDs)\n 5. No parameters (LAST RESORT - fetches up to 1000 users, avoid unless absolutely necessary)\n\n CRITICAL USAGE RULES:\n • getMe and name parameters CANNOT be combined with any other parameters\n • userIds + teamIds requires explicit includeTeams: true flag\n • teamsOnly: true prevents user data fetching (teams-only queries)\n • includeTeamMembers: true adds detailed member data to teams\n • includeTeams: true fetches both users and teams, do not use this to fetch a specific user\'s teams rather fetch that user by id and you will get their team memberships.\n\n OPTIMIZATION DIRECTIVES:\n • NEVER fetch all users when specific IDs are available\n • NEVER use broad queries for single user/team lookups \n • ALWAYS prefer name search over ID-less queries for individual users\n • SET includeTeamMembers: false for team lists, true only for member analysis \n • AVOID includeTeams: true unless you specifically need both users AND teams\n • AVOID broad queries for single user/team, if you have specific IDs, use them. For example getting a user\'s teams, use that user\'s ID and fetch their team using the includeTeams flag.\n\n RESPONSE CONTENT:\n • Users: id, name, email, title, permissions, contact details, team memberships\n • Teams: id, name, owners, members (when includeTeamMembers: true)\n • Current user: id, name, title, enabled, is_admin, is_guest (basic profile only)'}getInputSchema(){return rT}async executeInternal(e){const a=e.userIds&&e.userIds.length>0,t=e.teamIds&&e.teamIds.length>0,i=e.includeTeams||!1,n=e.teamsOnly||!1,o=e.includeTeamMembers||!1,s=!!e.name;if(e.getMe||!1){if(a||t||i||n||o||s)return{content:"PARAMETER_CONFLICT: getMe is STANDALONE only. Remove all other parameters when using getMe: true for current user lookup."};const e=await this.mondayApi.request(iT);if(!e.me)return{content:"AUTHENTICATION_ERROR: Current user fetch failed. Verify API token and user permissions."};const p={users:[e.me]};return{content:nT(p)}}if(s){if(a||t||i||n||o)return{content:"PARAMETER_CONFLICT: name is STANDALONE only. Remove userIds, teamIds, includeTeams, teamsOnly, and includeTeamMembers when using name search."};const s={name:e.name},p=await this.mondayApi.request(tT,s);if(!p.users||0===p.users.length)return{content:`NAME_SEARCH_EMPTY: No users found matching "${e.name}". Try broader search terms or verify user exists in account.`};const r=p.users.filter((e=>null!==e)).map((e=>`• **${e.name}** (ID: ${e.id})${e.title?` - ${e.title}`:""}`)).join("\n");return{content:`Found ${p.users.length} user(s) matching "${e.name}":\n\n${r}`}}if(n&&i)return{content:"PARAMETER_CONFLICT: Cannot use teamsOnly: true with includeTeams: true. Use teamsOnly for teams-only queries or includeTeams for combined data."};if(a&&e.userIds&&e.userIds.length>oT)return{content:`LIMIT_EXCEEDED: userIds array too large (${e.userIds.length}/500). Split into batches of max 500 IDs and make multiple calls.`};if(t&&e.teamIds&&e.teamIds.length>sT)return{content:`LIMIT_EXCEEDED: teamIds array too large (${e.teamIds.length}/500). Split into batches of max 500 IDs and make multiple calls.`};let p;if(n||!a&&t&&!i)if(o){const a={teamIds:e.teamIds};p=await this.mondayApi.request(aT,a)}else{const a={teamIds:e.teamIds};p=await this.mondayApi.request(eT,a)}else if(i){const a={userIds:e.userIds,teamIds:e.teamIds,limit:pT};p=await this.mondayApi.request(Z_,a)}else if(a){const a={userIds:e.userIds,limit:pT};p=await this.mondayApi.request(Q_,a)}else{const e={userIds:void 0,limit:pT};p=await this.mondayApi.request(X_,e)}return{content:nT(p)}}},class extends Zm{constructor(){super(...arguments),this.name="change_item_column_values",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Change Item Column Values",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Change the column values of an item in a monday.com board"}getInputSchema(){return this.context?.boardId?Gw:Hw}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),itemId:e.itemId.toString(),columnValues:e.columnValues},t=await this.mondayApi.request(Iw,a);return{content:`Item ${t.change_multiple_column_values?.id} successfully updated with the new column values`}}},class extends Zm{constructor(){super(...arguments),this.name="move_item_to_group",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Move Item to Group",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Move an item to a group in a monday.com board"}getInputSchema(){return dT}async executeInternal(e){const a={itemId:e.itemId.toString(),groupId:e.groupId},t=await this.mondayApi.request(Sw,a);return{content:`Item ${t.move_item_to_group?.id} successfully moved to group ${e.groupId}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_board",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Board",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a monday.com board"}getInputSchema(){return Ww}async executeInternal(e){const a={boardName:e.boardName,boardKind:e.boardKind,boardDescription:e.boardDescription,workspaceId:e.workspaceId},t=await this.mondayApi.request(Aw,a);return{content:`Board ${t.create_board?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_form",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Form",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a monday.com form. This will create a new form as well as a new board for which the form’s responses will be stored. The returned board_id is the ID of the board that was created while the returned formToken can be used for all future queries and mutations to continue editing the form."}getInputSchema(){return Ex}async executeInternal(e){const a={destination_workspace_id:e.destination_workspace_id,destination_folder_id:e.destination_folder_id,destination_folder_name:e.destination_folder_name,board_kind:e.board_kind,destination_name:e.destination_name,board_owner_ids:e.board_owner_ids,board_owner_team_ids:e.board_owner_team_ids,board_subscriber_ids:e.board_subscriber_ids,board_subscriber_teams_ids:e.board_subscriber_teams_ids},t=await this.mondayApi.request(tx,a);return{content:`Form created successfully. Board ID: ${t.create_form?.boardId}, Token: ${t.create_form?.token}`}}},class extends Zm{constructor(){super(...arguments),this.name="update_form",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Form",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0}),this.helpers=new u_(this.mondayApi),this.actionHandlers=new Map([[zx.setFormPassword,this.helpers.setFormPassword.bind(this.helpers)],[zx.shortenFormUrl,this.helpers.shortenFormUrl.bind(this.helpers)],[zx.deactivate,this.helpers.deactivateForm.bind(this.helpers)],[zx.activate,this.helpers.activateForm.bind(this.helpers)],[zx.createTag,this.helpers.createTag.bind(this.helpers)],[zx.deleteTag,this.helpers.deleteTag.bind(this.helpers)],[zx.updateTag,this.helpers.updateTag.bind(this.helpers)],[zx.updateAppearance,this.helpers.updateAppearance.bind(this.helpers)],[zx.updateAccessibility,this.helpers.updateAccessibility.bind(this.helpers)],[zx.updateFeatures,this.helpers.updateFeatures.bind(this.helpers)],[zx.updateQuestionOrder,this.helpers.updateQuestionOrder.bind(this.helpers)],[zx.updateFormHeader,this.helpers.updateFormHeader.bind(this.helpers)]])}getDescription(){return'Update a monday.com form. Handles the following form update actions that can only be done one at a time using the correct "action" input: \n - update form\'s feature settings with the action "updateFeatures",\n - update form\'s appearance settings with the action "updateAppearance",\n - update form\'s accessibility settings with the action "updateAccessibility",\n - update form\'s title with the action "updateFormHeader",\n - update form\'s description with the action "updateFormHeader",\n - update form\'s question order with the action "updateQuestionOrder",\n - create a new form tag with the action "createTag",\n - delete a form tag with the action "deleteTag",\n - update a form tag with the action "updateTag",\n - set or update the form\'s password with the action "setFormPassword"\n - shorten form\'s url with the action "shortenFormUrl"\n - deactivate form with the action "deactivateForm"\n - reactivate form with the action "activateForm"'}getInputSchema(){return m_}async executeInternal(e){const a=this.actionHandlers.get(e.action);return a?await a(e):{content:"Received an invalid action for the update form tool."}}},class extends Zm{constructor(){super(...arguments),this.name="get_form",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Form",readOnlyHint:!0,destructiveHint:!1})}getDescription(){return"Get a monday.com form by its form token. Form tokens can be extracted from the form’s url. Given a form url, such as https://forms.monday.com/forms/abc123def456ghi789?r=use1, the token is the alphanumeric string that appears right after /forms/ and before the ?. In the example, the token is abc123def456ghi789."}getInputSchema(){return f_}async executeInternal(e){const a={formToken:e.formToken},t=await this.mondayApi.request(ix,a);return t.form?{content:`The form with the token ${e.formToken} is: ${JSON.stringify(t.form,null,2)}`}:{content:`Form with token ${e.formToken} not found or you don't have access to it.`}}},class extends Zm{constructor(){super(...arguments),this.name="form_questions_editor",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Form Questions Editor",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1}),this.helpers=new qx(this.mondayApi),this.actionHandlers=new Map([[Ux.Delete,this.helpers.deleteQuestion.bind(this.helpers)],[Ux.Update,this.helpers.updateQuestion.bind(this.helpers)],[Ux.Create,this.helpers.createQuestion.bind(this.helpers)]])}getDescription(){return"Create, update, or delete a question in a monday.com form"}getInputSchema(){return Mx}async executeInternal(e){const a=this.actionHandlers.get(e.action);return a?await a(e):{content:`Unknown action: ${e.action}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_column",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Column",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new column in a monday.com board"}getInputSchema(){return this.context?.boardId?h_:v_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),columnType:e.columnType,columnTitle:e.columnTitle,columnDescription:e.columnDescription,columnSettings:"string"==typeof e.columnSettings?JSON.parse(e.columnSettings):e.columnSettings},t=await this.mondayApi.request(Dw,a);return{content:`Column ${t.create_column?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_group",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Group",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new group in a monday.com board. Groups are sections that organize related items. Use when users want to add structure, categorize items, or create workflow phases. Groups can be positioned relative to existing groups and assigned predefined colors. Items will always be created in the top group and so the top group should be the most relevant one for new item creation"}getInputSchema(){return w_}async executeInternal(e){const a={boardId:e.boardId,groupName:e.groupName,groupColor:e.groupColor,relativeTo:e.relativeTo,positionRelativeMethod:e.positionRelativeMethod},t=await this.mondayApi.request(g_,a);return{content:`Group "${t.create_group?.title}" (ID: ${t.create_group?.id}) successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="delete_column",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Delete Column",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1})}getDescription(){return"Delete a column from a monday.com board"}getInputSchema(){return this.context?.boardId?N_:I_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),columnId:e.columnId},t=await this.mondayApi.request(Ow,a);return{content:`Column ${t.delete_column?.id} successfully deleted`}}},zw,class extends Zm{constructor(){super(...arguments),this.name="get_graphql_schema",this.type=exports.ToolType.ALL_API,this.annotations=Xm({title:"Get GraphQL Schema",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Fetch the monday.com GraphQL schema structure including query and mutation definitions. This tool returns available query fields, mutation fields, and a list of GraphQL types in the schema. You can filter results by operation type (read/write) to focus on either queries or mutations."}getInputSchema(){return P_}async executeInternal(e){try{const a=await this.mondayApi.request(kw),t=e?.operationType,i=a.queryType?.fields?.map((e=>`- ${e.name}${e.description?`: ${e.description}`:""}`)).join("\n")||"No query fields found",n=a.mutationType?.fields?.map((e=>`- ${e.name}${e.description?`: ${e.description}`:""}`)).join("\n")||"No mutation fields found",o=a.__schema,s=o?.types?.filter((e=>e.name&&!e.name.startsWith("__"))).map((e=>`- ${e.name} (${e.kind||"unknown"})`)).join("\n")||"No types found";let p="## GraphQL Schema\n";return t&&"read"!==t||(p+=`- Query Type: ${a.__schema?.queryType?.name}\n\n`,p+=`## Query Fields\n${i}\n\n`),t&&"write"!==t||(p+=`- Mutation Type: ${a.__schema?.mutationType?.name}\n\n`,p+=`## Mutation Fields\n${n}\n\n`),p+=`## Available Types\n${s}\n\n`,p+='To get detailed information about a specific type, use the get_type_details tool with the type name.\nFor example: get_type_details(typeName: "Board") to see Board type details.',{content:p}}catch(e){return{content:`Error fetching GraphQL schema: ${e instanceof Error?e.message:"Unknown error"}`}}}},class extends Zm{constructor(){super(...arguments),this.name="get_column_type_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Column Type Info",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Retrieves comprehensive information about a specific column type, including JSON schema definition and other metadata. Use this before creating columns with the create_column tool to understand the structure, validation rules, and available properties for column settings."}getInputSchema(){return V_}async executeInternal(e){const a={type:e.columnType},t=await this.mondayApi.request(j_,a);if(!t?.get_column_type_schema)return{content:`Information for column type "${e.columnType}" not found or not available.`};const i={schema:t.get_column_type_schema};return{content:`Column Type Information for "${e.columnType}":\n\n${JSON.stringify(i,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_type_details",this.type=exports.ToolType.ALL_API,this.annotations=Xm({title:"Get Type Details",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get detailed information about a specific GraphQL type from the monday.com API schema"}getInputSchema(){return U_}async executeInternal(e){try{if(!e.typeName)return{content:"Error: typeName is required. Please provide a valid GraphQL type name."};const t=(a=e.typeName,yw`
|
|
1212
|
+
`,kT={objectType:e.z.nativeEnum(Eg).describe("The type of object to move"),id:e.z.string().describe("The ID of the object to move"),position:e.z.object({object_id:e.z.string().describe("The ID of the object to position the object relative to"),object_type:e.z.nativeEnum(Eg).describe("The type of object to position the object relative to"),is_after:e.z.boolean().optional().describe("Whether to position the object after the object")}).optional().describe("The new position of the object. Required if changing the position based on another object."),parentFolderId:e.z.string().optional().describe("The ID of the new parent folder. Required if moving to a different folder."),workspaceId:e.z.string().optional().describe("The ID of the workspace containing the object. Required if moving to a different workspace."),accountProductId:e.z.string().optional().describe("The ID of the account product containing the object. Required if moving to a different account product.")};e.z.enum(["enable","disable","status","list","detailed","reset"]).describe('Action to perform: "list" or "detailed" to discover available tools, "status" to check current states, "enable" to activate needed tools, "disable" to deactivate tools, "reset" to restore defaults'),e.z.string().optional().describe("Name of the tool to manage (required for enable/disable/status/reset)");const RT=[class extends Zm{constructor(){super(...arguments),this.name="delete_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Delete Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1})}getDescription(){return"Delete an item"}getInputSchema(){return S_}async executeInternal(e){const a={id:e.itemId.toString()},t=await this.mondayApi.request(ww,a);return{content:`Item ${t.delete_item?.id} successfully deleted`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_items_by_name",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get items by board id and term"}getInputSchema(){return this.context?.boardId?$_:L_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),term:e.term},t=await this.mondayApi.request(xw,a);return{content:`Items ${t.boards?.[0]?.items_page?.items?.map((e=>`name: ${e.name}, id: ${e.id}`)).join(", ")} successfully fetched`}}},class extends Zm{constructor(){super(...arguments),this.name="create_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new item in a monday.com board"}getInputSchema(){return this.context?.boardId?x_:__}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),itemName:e.name,groupId:e.groupId,columnValues:e.columnValues},t=await this.mondayApi.request(_w,a);return{content:`Item ${t.create_item?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_update",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Update",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new update in a monday.com board"}getInputSchema(){return E_}async executeInternal(e){const a={itemId:e.itemId.toString(),body:e.body},t=await this.mondayApi.request(Tw,a);return{content:`Update ${t.create_update?.id} successfully created on item ${e.itemId}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_schema",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Schema",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get board schema (columns and groups) by board id"}getInputSchema(){if(!this.context?.boardId)return F_}async executeInternal(e){const a=this.context?.boardId??e.boardId,t={boardId:a.toString()},i=await this.mondayApi.request(Ew,t);return{content:`The current schema of the board ${a} is: \n \n\nColumns:\n ${i.boards?.[0]?.columns?.map((e=>`Id - ${e?.id}\n Title - ${e?.title}\n Type - ${e?.type}`)).join("\n")}\n \n\nGroups:\n ${i.boards?.[0]?.groups?.map((e=>`Id - ${e?.id}\n Title - ${e?.title}`)).join("\n")}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_activity",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Activity",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0}),this.defaultLimit=1e3}getDescription(){return"Get board activity logs for a specified time range (defaults to last 30 days)"}getInputSchema(){return O_}async executeInternal(e){const a=new Date,t=new Date(a.getTime()-Qm.MONTH30Days),i=e?.fromDate||t.toISOString(),n=e?.toDate||a.toISOString(),o={boardId:e.boardId.toString(),fromDate:i,toDate:n,limit:this.defaultLimit,page:1},s=await this.mondayApi.request(D_,o),p=s.boards?.[0]?.activity_logs;if(!p||0===p.length)return{content:`No activity found for board ${e.boardId} in the specified time range (${i} to ${n}).`};const r=p.filter((e=>null!=e)).map((e=>`• ${e.created_at}: ${e.event} on ${e.entity} by user ${e.user_id}${e.data?` - Data: ${e.data}`:""}`)).join("\n");return{content:`Activity logs for board ${e.boardId} from ${i} to ${n} (${p.length} entries):\n\n${r}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_board_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Board Info",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get comprehensive board information including metadata, structure, owners, and configuration"}getInputSchema(){return C_}async executeInternal(e){const a={boardId:e.boardId.toString()},t=await this.mondayApi.request(k_,a),i=t.boards?.[0];return i?{content:R_(i)}:{content:`Board with id ${e.boardId} not found or you don't have access to it.`}}},class extends Zm{constructor(){super(...arguments),this.name="get_users_by_name",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Users",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get users, can be filtered by name or partial name"}getInputSchema(){return M_}async executeInternal(e){const a={name:e.name},t=await this.mondayApi.request(Nw,a);return{content:`Relevant users:\n ${t.users?.map((e=>` id: ${e?.id}, name: ${e?.name}, title: ${e?.title}`)).join("\n")}`}}},class extends Zm{constructor(){super(...arguments),this.name="list_users_and_teams",this.type=exports.ToolType.READ,this.annotations=Xm({title:"List Users and Teams",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return'PRECISION-FIRST user and team retrieval tool. AI agents MUST prioritize specific queries over broad searches.\n\n MANDATORY BEST PRACTICES:\n 1. ALWAYS use specific IDs when available (userIds, teamIds) - highest precision and performance\n 2. ALWAYS use name search when you have user names but no IDs \n 3. ALWAYS use boolean getMe: true when requesting current user information\n 4. AVOID broad queries (no parameters) - use only as absolute last resort\n 5. COMBINE parameters strategically to minimize API calls\n\n REQUIRED PARAMETER PRIORITY (use in this order):\n 1. getMe: true (when requesting current user) - STANDALONE ONLY\n 2. name="exact_name" (when searching by name) - STANDALONE ONLY \n 3. userIds=["id1","id2"] (when you have specific user IDs)\n 4. teamIds=["id1","id2"] + teamsOnly: true (when you have specific team IDs)\n 5. No parameters (LAST RESORT - fetches up to 1000 users, avoid unless absolutely necessary)\n\n CRITICAL USAGE RULES:\n • getMe and name parameters CANNOT be combined with any other parameters\n • userIds + teamIds requires explicit includeTeams: true flag\n • teamsOnly: true prevents user data fetching (teams-only queries)\n • includeTeamMembers: true adds detailed member data to teams\n • includeTeams: true fetches both users and teams, do not use this to fetch a specific user\'s teams rather fetch that user by id and you will get their team memberships.\n\n OPTIMIZATION DIRECTIVES:\n • NEVER fetch all users when specific IDs are available\n • NEVER use broad queries for single user/team lookups \n • ALWAYS prefer name search over ID-less queries for individual users\n • SET includeTeamMembers: false for team lists, true only for member analysis \n • AVOID includeTeams: true unless you specifically need both users AND teams\n • AVOID broad queries for single user/team, if you have specific IDs, use them. For example getting a user\'s teams, use that user\'s ID and fetch their team using the includeTeams flag.\n\n RESPONSE CONTENT:\n • Users: id, name, email, title, permissions, contact details, team memberships\n • Teams: id, name, owners, members (when includeTeamMembers: true)\n • Current user: id, name, title, enabled, is_admin, is_guest (basic profile only)'}getInputSchema(){return rT}async executeInternal(e){const a=e.userIds&&e.userIds.length>0,t=e.teamIds&&e.teamIds.length>0,i=e.includeTeams||!1,n=e.teamsOnly||!1,o=e.includeTeamMembers||!1,s=!!e.name;if(e.getMe||!1){if(a||t||i||n||o||s)return{content:"PARAMETER_CONFLICT: getMe is STANDALONE only. Remove all other parameters when using getMe: true for current user lookup."};const e=await this.mondayApi.request(iT);if(!e.me)return{content:"AUTHENTICATION_ERROR: Current user fetch failed. Verify API token and user permissions."};const p={users:[e.me]};return{content:nT(p)}}if(s){if(a||t||i||n||o)return{content:"PARAMETER_CONFLICT: name is STANDALONE only. Remove userIds, teamIds, includeTeams, teamsOnly, and includeTeamMembers when using name search."};const s={name:e.name},p=await this.mondayApi.request(tT,s);if(!p.users||0===p.users.length)return{content:`NAME_SEARCH_EMPTY: No users found matching "${e.name}". Try broader search terms or verify user exists in account.`};const r=p.users.filter((e=>null!==e)).map((e=>`• **${e.name}** (ID: ${e.id})${e.title?` - ${e.title}`:""}`)).join("\n");return{content:`Found ${p.users.length} user(s) matching "${e.name}":\n\n${r}`}}if(n&&i)return{content:"PARAMETER_CONFLICT: Cannot use teamsOnly: true with includeTeams: true. Use teamsOnly for teams-only queries or includeTeams for combined data."};if(a&&e.userIds&&e.userIds.length>oT)return{content:`LIMIT_EXCEEDED: userIds array too large (${e.userIds.length}/500). Split into batches of max 500 IDs and make multiple calls.`};if(t&&e.teamIds&&e.teamIds.length>sT)return{content:`LIMIT_EXCEEDED: teamIds array too large (${e.teamIds.length}/500). Split into batches of max 500 IDs and make multiple calls.`};let p;if(n||!a&&t&&!i)if(o){const a={teamIds:e.teamIds};p=await this.mondayApi.request(aT,a)}else{const a={teamIds:e.teamIds};p=await this.mondayApi.request(eT,a)}else if(i){const a={userIds:e.userIds,teamIds:e.teamIds,limit:pT};p=await this.mondayApi.request(Z_,a)}else if(a){const a={userIds:e.userIds,limit:pT};p=await this.mondayApi.request(Q_,a)}else{const e={userIds:void 0,limit:pT};p=await this.mondayApi.request(X_,e)}return{content:nT(p)}}},class extends Zm{constructor(){super(...arguments),this.name="change_item_column_values",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Change Item Column Values",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Change the column values of an item in a monday.com board"}getInputSchema(){return this.context?.boardId?Gw:Hw}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),itemId:e.itemId.toString(),columnValues:e.columnValues},t=await this.mondayApi.request(Iw,a);return{content:`Item ${t.change_multiple_column_values?.id} successfully updated with the new column values`}}},class extends Zm{constructor(){super(...arguments),this.name="move_item_to_group",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Move Item to Group",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Move an item to a group in a monday.com board"}getInputSchema(){return dT}async executeInternal(e){const a={itemId:e.itemId.toString(),groupId:e.groupId},t=await this.mondayApi.request(Sw,a);return{content:`Item ${t.move_item_to_group?.id} successfully moved to group ${e.groupId}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_board",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Board",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a monday.com board"}getInputSchema(){return Ww}async executeInternal(e){const a={boardName:e.boardName,boardKind:e.boardKind,boardDescription:e.boardDescription,workspaceId:e.workspaceId},t=await this.mondayApi.request(Aw,a);return{content:`Board ${t.create_board?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_form",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Form",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a monday.com form. This will create a new form as well as a new board for which the form’s responses will be stored. The returned board_id is the ID of the board that was created while the returned formToken can be used for all future queries and mutations to continue editing the form."}getInputSchema(){return Ex}async executeInternal(e){const a={destination_workspace_id:e.destination_workspace_id,destination_folder_id:e.destination_folder_id,destination_folder_name:e.destination_folder_name,board_kind:e.board_kind,destination_name:e.destination_name,board_owner_ids:e.board_owner_ids,board_owner_team_ids:e.board_owner_team_ids,board_subscriber_ids:e.board_subscriber_ids,board_subscriber_teams_ids:e.board_subscriber_teams_ids},t=await this.mondayApi.request(tx,a);return{content:`Form created successfully. Board ID: ${t.create_form?.boardId}, Token: ${t.create_form?.token}`}}},class extends Zm{constructor(){super(...arguments),this.name="update_form",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Form",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0}),this.helpers=new u_(this.mondayApi),this.actionHandlers=new Map([[zx.setFormPassword,this.helpers.setFormPassword.bind(this.helpers)],[zx.shortenFormUrl,this.helpers.shortenFormUrl.bind(this.helpers)],[zx.deactivate,this.helpers.deactivateForm.bind(this.helpers)],[zx.activate,this.helpers.activateForm.bind(this.helpers)],[zx.createTag,this.helpers.createTag.bind(this.helpers)],[zx.deleteTag,this.helpers.deleteTag.bind(this.helpers)],[zx.updateTag,this.helpers.updateTag.bind(this.helpers)],[zx.updateAppearance,this.helpers.updateAppearance.bind(this.helpers)],[zx.updateAccessibility,this.helpers.updateAccessibility.bind(this.helpers)],[zx.updateFeatures,this.helpers.updateFeatures.bind(this.helpers)],[zx.updateQuestionOrder,this.helpers.updateQuestionOrder.bind(this.helpers)],[zx.updateFormHeader,this.helpers.updateFormHeader.bind(this.helpers)]])}getDescription(){return'Update a monday.com form. Handles the following form update actions that can only be done one at a time using the correct "action" input: \n - update form\'s feature settings with the action "updateFeatures",\n - update form\'s appearance settings with the action "updateAppearance",\n - update form\'s accessibility settings with the action "updateAccessibility",\n - update form\'s title with the action "updateFormHeader",\n - update form\'s description with the action "updateFormHeader",\n - update form\'s question order with the action "updateQuestionOrder",\n - create a new form tag with the action "createTag",\n - delete a form tag with the action "deleteTag",\n - update a form tag with the action "updateTag",\n - set or update the form\'s password with the action "setFormPassword"\n - shorten form\'s url with the action "shortenFormUrl"\n - deactivate form with the action "deactivateForm"\n - reactivate form with the action "activateForm"'}getInputSchema(){return m_}async executeInternal(e){const a=this.actionHandlers.get(e.action);return a?await a(e):{content:"Received an invalid action for the update form tool."}}},class extends Zm{constructor(){super(...arguments),this.name="get_form",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Form",readOnlyHint:!0,destructiveHint:!1})}getDescription(){return"Get a monday.com form by its form token. Form tokens can be extracted from the form’s url. Given a form url, such as https://forms.monday.com/forms/abc123def456ghi789?r=use1, the token is the alphanumeric string that appears right after /forms/ and before the ?. In the example, the token is abc123def456ghi789."}getInputSchema(){return f_}async executeInternal(e){const a={formToken:e.formToken},t=await this.mondayApi.request(ix,a);return t.form?{content:`The form with the token ${e.formToken} is: ${JSON.stringify(t.form,null,2)}`}:{content:`Form with token ${e.formToken} not found or you don't have access to it.`}}},class extends Zm{constructor(){super(...arguments),this.name="form_questions_editor",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Form Questions Editor",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1}),this.helpers=new qx(this.mondayApi),this.actionHandlers=new Map([[Ux.Delete,this.helpers.deleteQuestion.bind(this.helpers)],[Ux.Update,this.helpers.updateQuestion.bind(this.helpers)],[Ux.Create,this.helpers.createQuestion.bind(this.helpers)]])}getDescription(){return"Create, update, or delete a question in a monday.com form"}getInputSchema(){return Mx}async executeInternal(e){const a=this.actionHandlers.get(e.action);return a?await a(e):{content:`Unknown action: ${e.action}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_column",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Column",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new column in a monday.com board"}getInputSchema(){return this.context?.boardId?h_:v_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),columnType:e.columnType,columnTitle:e.columnTitle,columnDescription:e.columnDescription,columnSettings:"string"==typeof e.columnSettings?JSON.parse(e.columnSettings):e.columnSettings},t=await this.mondayApi.request(Dw,a);return{content:`Column ${t.create_column?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_group",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Group",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new group in a monday.com board. Groups are sections that organize related items. Use when users want to add structure, categorize items, or create workflow phases. Groups can be positioned relative to existing groups and assigned predefined colors. Items will always be created in the top group and so the top group should be the most relevant one for new item creation"}getInputSchema(){return w_}async executeInternal(e){const a={boardId:e.boardId,groupName:e.groupName,groupColor:e.groupColor,relativeTo:e.relativeTo,positionRelativeMethod:e.positionRelativeMethod},t=await this.mondayApi.request(g_,a);return{content:`Group "${t.create_group?.title}" (ID: ${t.create_group?.id}) successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="delete_column",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Delete Column",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1})}getDescription(){return"Delete a column from a monday.com board"}getInputSchema(){return this.context?.boardId?N_:I_}async executeInternal(e){const a={boardId:(this.context?.boardId??e.boardId).toString(),columnId:e.columnId},t=await this.mondayApi.request(Ow,a);return{content:`Column ${t.delete_column?.id} successfully deleted`}}},zw,class extends Zm{constructor(){super(...arguments),this.name="get_graphql_schema",this.type=exports.ToolType.ALL_API,this.annotations=Xm({title:"Get GraphQL Schema",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Fetch the monday.com GraphQL schema structure including query and mutation definitions. This tool returns available query fields, mutation fields, and a list of GraphQL types in the schema. You can filter results by operation type (read/write) to focus on either queries or mutations."}getInputSchema(){return P_}async executeInternal(e){try{const a=await this.mondayApi.request(kw),t=e?.operationType,i=a.queryType?.fields?.map((e=>`- ${e.name}${e.description?`: ${e.description}`:""}`)).join("\n")||"No query fields found",n=a.mutationType?.fields?.map((e=>`- ${e.name}${e.description?`: ${e.description}`:""}`)).join("\n")||"No mutation fields found",o=a.__schema,s=o?.types?.filter((e=>e.name&&!e.name.startsWith("__"))).map((e=>`- ${e.name} (${e.kind||"unknown"})`)).join("\n")||"No types found";let p="## GraphQL Schema\n";return t&&"read"!==t||(p+=`- Query Type: ${a.__schema?.queryType?.name}\n\n`,p+=`## Query Fields\n${i}\n\n`),t&&"write"!==t||(p+=`- Mutation Type: ${a.__schema?.mutationType?.name}\n\n`,p+=`## Mutation Fields\n${n}\n\n`),p+=`## Available Types\n${s}\n\n`,p+='To get detailed information about a specific type, use the get_type_details tool with the type name.\nFor example: get_type_details(typeName: "Board") to see Board type details.',{content:p}}catch(e){return{content:`Error fetching GraphQL schema: ${e instanceof Error?e.message:"Unknown error"}`}}}},class extends Zm{constructor(){super(...arguments),this.name="get_column_type_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Column Type Info",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Retrieves comprehensive information about a specific column type, including JSON schema definition and other metadata. Use this before creating columns with the create_column tool to understand the structure, validation rules, and available properties for column settings."}getInputSchema(){return V_}async executeInternal(e){const a={type:e.columnType},t=await this.mondayApi.request(j_,a);if(!t?.get_column_type_schema)return{content:`Information for column type "${e.columnType}" not found or not available.`};const i={schema:t.get_column_type_schema};return{content:`Column Type Information for "${e.columnType}":\n\n${JSON.stringify(i,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="get_type_details",this.type=exports.ToolType.ALL_API,this.annotations=Xm({title:"Get Type Details",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get detailed information about a specific GraphQL type from the monday.com API schema"}getInputSchema(){return U_}async executeInternal(e){try{if(!e.typeName)return{content:"Error: typeName is required. Please provide a valid GraphQL type name."};const t=(a=e.typeName,yw`
|
|
1213
1213
|
query getTypeDetails {
|
|
1214
1214
|
__type(name: "${a}") {
|
|
1215
1215
|
name
|
|
@@ -1297,5 +1297,5 @@
|
|
|
1297
1297
|
}
|
|
1298
1298
|
}
|
|
1299
1299
|
}
|
|
1300
|
-
`),i=await this.mondayApi.request(t);if(!i.__type)return{content:`Type '${e.typeName}' not found in the GraphQL schema. Please check the type name and try again.`};let n=`## Type: ${i.__type.name||"Unnamed"} ${e.typeName===i.__type.name?"":`(queried: ${e.typeName})`}\nKind: ${i.__type.kind}\n${i.__type.description?`Description: ${i.__type.description}`:""}\n\n`;return i.__type.fields&&i.__type.fields.length>0&&(n+="## Fields\n",i.__type.fields.forEach((e=>{const a=B_(e.type);n+=`- ${e.name}: ${a}${e.description?` - ${e.description}`:""}\n`,e.args&&e.args.length>0&&(n+=" Arguments:\n",e.args.forEach((e=>{const a=B_(e.type);n+=` - ${e.name}: ${a}${e.description?` - ${e.description}`:""}${e.defaultValue?` (default: ${e.defaultValue})`:""}\n`})))})),n+="\n"),i.__type.inputFields&&i.__type.inputFields.length>0&&(n+="## Input Fields\n",i.__type.inputFields.forEach((e=>{const a=B_(e.type);n+=`- ${e.name}: ${a}${e.description?` - ${e.description}`:""}${e.defaultValue?` (default: ${e.defaultValue})`:""}\n`})),n+="\n"),i.__type.interfaces&&i.__type.interfaces.length>0&&(n+="## Implements\n",i.__type.interfaces.forEach((e=>{n+=`- ${e.name}\n`})),n+="\n"),i.__type.enumValues&&i.__type.enumValues.length>0&&(n+="## Enum Values\n",i.__type.enumValues.forEach((e=>{n+=`- ${e.name}${e.description?` - ${e.description}`:""}\n`})),n+="\n"),i.__type.possibleTypes&&i.__type.possibleTypes.length>0&&(n+="## Possible Types\n",i.__type.possibleTypes.forEach((e=>{n+=`- ${e.name}\n`}))),n+=`\n## Usage Examples\nIf this is a Query or Mutation field, you can use it in the all_monday_api tool.\n\nExample for query:\nall_monday_api(operation: "query", name: "getTypeData", variables: "{\\"typeName\\": \\"${i.__type.name}\\"}")\n\nExample for object field access:\nWhen querying objects that have this type, include these fields in your query.\n`,{content:n}}catch(e){const a=e instanceof Error?e.message:"Unknown error",t=a.includes("JSON");return{content:`Error fetching type details: ${a}${t?"\n\nThis could be because the type name is incorrect or the GraphQL query format is invalid. Please check the type name and try again.":""}`}}var a}},class extends Zm{constructor(){super(...arguments),this.name="create_custom_activity",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Custom Activity",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new custom activity in the E&A app"}getInputSchema(){return b_}async executeInternal(e){const a={color:e.color,icon_id:e.icon_id,name:e.name};return await this.mondayApi.request(Cw,a),{content:`Custom activity '${e.name}' with color ${e.color} and icon ${e.icon_id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_timeline_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Timeline Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new timeline item in the E&A app"}getInputSchema(){return T_}async executeInternal(e){const a={item_id:e.item_id.toString(),custom_activity_id:e.custom_activity_id,title:e.title,timestamp:e.timestamp,summary:e.summary,content:e.content,location:e.location,phone:e.phone,url:e.url};e.start_timestamp&&e.end_timestamp&&(a.time_range={start_timestamp:e.start_timestamp,end_timestamp:e.end_timestamp});const t=await this.mondayApi.request($w,a);return{content:`Timeline item '${e.title}' with ID ${t.create_timeline_item?.id} successfully created on item ${e.item_id}`}}},class extends Zm{constructor(){super(...arguments),this.name="fetch_custom_activity",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Fetch Custom Activities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get custom activities from the E&A app"}getInputSchema(){return A_}async executeInternal(e){const a=await this.mondayApi.request(Lw);if(!a.custom_activity||0===a.custom_activity.length)return{content:"No custom activities found"};const t=a.custom_activity.map((e=>({id:e.id,name:e.name,color:e.color,icon_id:e.icon_id,type:e.type})));return{content:`Found ${t.length} custom activities: ${JSON.stringify(t,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="read_docs",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Read Documents",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get a collection of monday.com documents with their content as markdown. \n\nPAGINATION: \n- Default limit is 25 documents per page\n- Use 'page' parameter to get additional pages (starts at 1)\n- Check response for 'has_more_pages' to know if you should continue paginating\n- If user asks for \"all documents\" and you get exactly 25 results, continue with page 2, 3, etc.\n\nFILTERING: Provide an ID filter object with:\n- type: 'ids' for specific document IDs\n- type: 'object_ids' for specific document object IDs \n- type: 'workspace_ids' for all docs in specific workspaces\n- values: array of ID strings (at least 1 required)\n\nExamples:\n- { type: 'ids', values: ['123', '456'] }\n- { type: 'object_ids', values: ['123'] }\n- { type: 'workspace_ids', values: ['ws_101'] }\n\nUSAGE PATTERNS:\n- For specific documents: use type 'ids' or 'object_ids' (A monday doc has two unique identifiers)\n- For workspace exploration: use type 'workspace_ids' with pagination\n- For large searches: start with page 1, then paginate if has_more_pages=true"}getInputSchema(){return cT}async executeInternal(e){try{const a=e.ids;let t,i,n;switch(a.type){case"ids":t=a.values;break;case"object_ids":i=a.values;break;case"workspace_ids":n=a.values}const o={ids:t,object_ids:i,limit:e.limit||25,order_by:e.order_by,page:e.page,workspace_ids:n};let s=await this.mondayApi.request(Uw,o);if((!s.docs||0===s.docs.length)&&t){const a={ids:void 0,object_ids:t,limit:e.limit||25,order_by:e.order_by,page:e.page,workspace_ids:n};s=await this.mondayApi.request(Uw,a)}if(!s.docs||0===s.docs.length){return{content:`No documents found matching the specified criteria${e.page?` (page ${e.page})`:""}.`}}const p=await this.enrichDocsWithMarkdown(s.docs,o),r=this.shouldSuggestPagination(s.docs.length,o.limit||25,o.page||1);return{content:p.content+r}}catch(e){return{content:`Error reading documents: ${e instanceof Error?e.message:"Unknown error occurred"}`}}}shouldSuggestPagination(e,a,t){return e===a?`\n\n🔄 PAGINATION SUGGESTION: You received exactly ${a} documents, which suggests there may be more. Consider calling this tool again with page: ${t+1} to get additional documents.`:""}async enrichDocsWithMarkdown(e,a){const t=await Promise.all(e.filter((e=>null!==e)).map((async e=>{let a="";try{const t={docId:e.id},i=await this.mondayApi.request(Bw,t);a=i.export_markdown_from_doc.success&&i.export_markdown_from_doc.markdown?i.export_markdown_from_doc.markdown:`Error getting markdown: ${i.export_markdown_from_doc.error||"Unknown error"}`}catch(e){a=`Error getting markdown: ${e instanceof Error?e.message:"Unknown error"}`}return{id:e.id,object_id:e.object_id,name:e.name,doc_kind:e.doc_kind,created_at:e.created_at,created_by:e.created_by?.name||"Unknown",url:e.url,relative_url:e.relative_url,workspace:e.workspace?.name||"Unknown",workspace_id:e.workspace_id,doc_folder_id:e.doc_folder_id,settings:e.settings,blocks_as_markdown:a}}))),i=a.page||1,n=a.limit||25,o=t.length,s=o===n;return{content:`Successfully retrieved ${t.length} document${1===t.length?"":"s"}.\n\nPAGINATION INFO:\n- Current page: ${i}\n- Documents per page: ${n}\n- Documents in this response: ${o}\n- Has more pages: ${s?"YES - call again with page: "+(i+1):"NO"}\n\nDOCUMENTS:\n${JSON.stringify(t,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="workspace_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Workspace Information",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"This tool returns the boards, docs and folders in a workspace and which folder they are in. It returns up to 100 of each object type, if you receive 100 assume there are additional objects of that type in the workspace."}getInputSchema(){return mT}async executeInternal(e){const a={workspace_id:e.workspace_id},t=await this.mondayApi.request(Mw,a);if(!t.workspaces||0===t.workspaces.length)return{content:`No workspace found with ID ${e.workspace_id}`};const i=function(e){const{workspaces:a,boards:t,docs:i,folders:n}=e,o=a?.[0];if(!o)throw new Error("No workspace found");const s=new Map((n||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).map((e=>[e.id,{id:e.id,name:e.name,boards:[],docs:[]}]))),p=[];(t||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).forEach((e=>{const a={id:e.id,name:e.name};e.board_folder_id&&s.has(e.board_folder_id)?s.get(e.board_folder_id).boards.push(a):p.push(a)}));const r=[];return(i||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).forEach((e=>{const a={id:e.id,name:e.name};e.doc_folder_id&&s.has(e.doc_folder_id)?s.get(e.doc_folder_id).docs.push(a):r.push(a)})),{workspace:{id:o.id,name:o.name,description:o.description||"",kind:o.kind||"",created_at:o.created_at||"",state:o.state||"",is_default_workspace:o.is_default_workspace||!1,owners_subscribers:(o.owners_subscribers||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name&&null!=e.email)).map((e=>({id:e.id,name:e.name,email:e.email})))},folders:Array.from(s.values()),root_items:{boards:p,docs:r}}}(t);return{content:`Workspace Information:\n\n**Workspace:** ${i.workspace.name} (ID: ${i.workspace.id})\n- Description: ${i.workspace.description||"No description"}\n- Kind: ${i.workspace.kind}\n- State: ${i.workspace.state}\n- Default Workspace: ${i.workspace.is_default_workspace?"Yes":"No"}\n- Created: ${i.workspace.created_at}\n- Owners/Subscribers: ${i.workspace.owners_subscribers.length} users\n\n**Folders (${i.folders.length}):**\n${i.folders.map((e=>`\n📁 ${e.name} (ID: ${e.id})\n - Boards (${e.boards.length}): ${e.boards.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n - Docs (${e.docs.length}): ${e.docs.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}`)).join("\n")}\n\n**Root Level Items:**\n- Boards (${i.root_items.boards.length}): ${i.root_items.boards.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n- Docs (${i.root_items.docs.length}): ${i.root_items.docs.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n\n**Summary:**\n- Total Folders: ${i.folders.length}\n- Total Boards: ${i.folders.reduce(((e,a)=>e+a.boards.length),0)+i.root_items.boards.length}\n- Total Docs: ${i.folders.reduce(((e,a)=>e+a.docs.length),0)+i.root_items.docs.length}\n\n${JSON.stringify(i,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="list_workspaces",this.type=exports.ToolType.READ,this.annotations=Xm({title:"List Workspaces",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"List all workspaces available to the user. Returns up to 500 workspaces with their ID, name, and description."}getInputSchema(){return fT}async executeInternal(e){const a={limit:5e3},t=await this.mondayApi.request(uT,a);if(!t.workspaces||0===t.workspaces.length)return{content:"No workspaces found."};const i=t.workspaces.filter((e=>null!==e)).map((e=>{const a=e.description?` - ${e.description}`:"";return`• **${e.name}** (ID: ${e.id})${a}`})).join("\n");return{content:`**Available Workspaces (${t.workspaces.length}):**\n\n${i}\n\n**Summary:**\nTotal workspaces found: ${t.workspaces.length}\n\n${JSON.stringify(t.workspaces,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_doc",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Document",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return'Create a new monday.com doc either inside a workspace or attached to an item (via a doc column). After creation, the provided markdown will be appended to the document.\n\nLOCATION TYPES:\n- workspace: Creates a document in a workspace (requires workspace_id, optional doc_kind, optional folder_id)\n- item: Creates a document attached to an item (requires item_id, optional column_id)\n\nUSAGE EXAMPLES:\n- Workspace doc: { location: { type: "workspace", workspace_id: 123, doc_kind: "private" }, markdown: "..." }\n- Workspace doc in folder: { location: { type: "workspace", workspace_id: 123, folder_id: 17264196 }, markdown: "..." }\n- Item doc: { location: { type: "item", item_id: 456, column_id: "doc_col_1" }, markdown: "..." }'}getInputSchema(){return vT}async executeInternal(e){try{let a,t;if(e.location.type===hT.enum.workspace){const i={location:{workspace:{workspace_id:e.location.workspace_id.toString(),name:e.doc_name,kind:e.location.doc_kind||wb.Public,folder_id:e.location.folder_id?.toString()}}},n=await this.mondayApi.request(jw,i);a=n?.create_doc?.id??void 0,t=n?.create_doc?.url??void 0}else if(e.location.type===hT.enum.item){const i={itemId:e.location.item_id.toString()},n=await this.mondayApi.request(Fw,i),o=n.items?.[0];if(!o)return{content:`Error: Item with id ${e.location.item_id} not found.`};const s=o.board?.id,p=o.board?.columns?.find((e=>e&&e.type===Rb.Doc));let r=e.location.column_id;if(!r)if(p)r=p.id;else{const e={boardId:s.toString(),columnType:Rb.Doc,columnTitle:"Doc"},a=await this.mondayApi.request(Dw,e);if(r=a?.create_column?.id,!r)return{content:"Error: Failed to create doc column."}}const d={location:{board:{item_id:e.location.item_id.toString(),column_id:r}}},l=await this.mondayApi.request(jw,d);if(a=l.create_doc?.id??void 0,t=l.create_doc?.url??void 0,e.doc_name&&a)try{const t={docId:a,name:e.doc_name};await this.mondayApi.request(Pw,t)}catch(e){console.warn("Failed to update doc name:",e)}}if(!a)return{content:"Error: Failed to create document."};const i={docId:a,markdown:e.markdown},n=await this.mondayApi.request(Vw,i),o=n?.add_content_to_doc_from_markdown?.success,s=n?.add_content_to_doc_from_markdown?.error;return o?{content:`✅ Document successfully created (id: ${a}). ${t?`\n\nURL: ${t}`:""}`}:{content:`Document ${a} created, but failed to add markdown content: ${s||"Unknown error"}`}}catch(e){return{content:`Error creating document: ${e instanceof Error?e.message:"Unknown error"}`}}}},class extends Zm{constructor(){super(...arguments),this.name="update_workspace",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Workspace",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Update an existing workspace in monday.com"}getInputSchema(){return TT}async executeInternal(e){const a={id:e.id,attributes:e.attributes},t=await this.mondayApi.request(_T,a);return{content:`Workspace ${t.update_workspace?.id} successfully updated`}}},class extends Zm{constructor(){super(...arguments),this.name="update_folder",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Folder",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Update an existing folder in monday.com"}getInputSchema(){return NT}async executeInternal(e){const a={folderId:e.folderId,name:e.name,color:e.color,fontWeight:e.fontWeight,customIcon:e.customIcon,parentFolderId:e.parentFolderId,workspaceId:e.workspaceId,accountProductId:e.accountProductId,position:e.position},t=await this.mondayApi.request(ET,a);return{content:`Folder ${t.update_folder?.id} successfully updated`}}},class extends Zm{constructor(){super(...arguments),this.name="create_workspace",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Workspace",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new workspace in monday.com"}getInputSchema(){return ST}async executeInternal(e){const a={name:e.name,workspaceKind:e.workspaceKind,description:e.description,accountProductId:e.accountProductId},t=await this.mondayApi.request(IT,a);return{content:`Workspace ${t.create_workspace?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_folder",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Folder",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new folder in a monday.com workspace"}getInputSchema(){return DT}async executeInternal(e){const a={workspaceId:e.workspaceId,name:e.name,color:e.color,fontWeight:e.fontWeight,customIcon:e.customIcon,parentFolderId:e.parentFolderId},t=await this.mondayApi.request(AT,a);return{content:`Folder ${t.create_folder?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="move_object",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Move Object",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Move a folder, board, or overview in monday.com. Use `position` for relative placement based on another object, `parentFolderId` for folder changes, `workspaceId` for workspace moves, and `accountProductId` for account product changes."}getInputSchema(){return RT}async executeUpdateFolder(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={folderId:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o},p=await this.mondayApi.request(ET,s);return{content:`Object ${p.update_folder?.id} successfully moved`}}async executeUpdateBoardHierarchy(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={boardId:a,attributes:{position:t,folder_id:i,workspace_id:n,account_product_id:o}},p=await this.mondayApi.request(OT,s);return p.update_board_hierarchy?.success?{content:`Board ${p.update_board_hierarchy?.board?.id} position updated successfully`}:{content:`Board position updated failed: ${p.update_board_hierarchy?.message}`}}async executeUpdateOverviewHierarchy(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={overviewId:a,attributes:{position:t,folder_id:i,workspace_id:n,account_product_id:o}},p=await this.mondayApi.request(kT,s);return p.update_overview_hierarchy?.success?{content:`Overview ${p.update_overview_hierarchy?.overview?.id} position updated successfully`}:{content:`Overview position updated failed: ${p.update_overview_hierarchy?.message}`}}async executeInternal(e){const{objectType:a}=e;switch(a){case Eg.Folder:return this.executeUpdateFolder(e);case Eg.Board:return this.executeUpdateBoardHierarchy(e);case Eg.Overview:return this.executeUpdateOverviewHierarchy(e);default:throw new Error(`Unsupported object type: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="create_dashboard",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Dashboard",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Use this tool to create a new monday.com dashboard that aggregates data from one or more boards. \n Dashboards provide visual representations of board data through widgets and charts.\n \n Use this tool when users want to:\n - Create a dashboard to visualize board data\n - Aggregate information from multiple boards\n - Set up a data visualization container for widgets"}getInputSchema(){return wT}async executeInternal(e){try{const a={name:e.name,workspace_id:e.workspace_id.toString(),board_ids:e.board_ids,kind:e.kind,board_folder_id:e.board_folder_id?.toString()},t=await this.mondayApi.request(bT,a);if(!t.create_dashboard)throw new Error("Failed to create dashboard");const i=t.create_dashboard,n=i.board_folder_id?` in folder ${i.board_folder_id}`:" in workspace root",o=i.kind===Fb.Public?"(visible to all workspace members)":"(private - visible only to invited users)";return{content:`✅ Dashboard "${i.name}" successfully created!\n\nDashboard Details:\n• ID: ${i.id}\n• Name: ${i.name}\n• Workspace ID: ${i.workspace_id}${n}\n• Visibility: ${i.kind} ${o}\n• Connected Boards: ${e.board_ids.length} board(s)\n\nNext Steps:\n1. Use 'all_widgets_schema' to understand available widget types\n2. Understand the connected boards structure, columns, and metadata. Map board ids to column ids\n3. Plan Domain-Beneficial Widgets - Strategic widget planning based on real data analysis\n4. Use 'create_widget' to add widgets to the dashboard`}}catch(e){const a=e instanceof Error?e.message:String(e);throw new Error(`Failed to create dashboard: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="all_widgets_schema",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get All Widget Schemas",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Fetch complete JSON Schema 7 definitions for all available widget types in monday.com.\n \n This tool is essential before creating widgets as it provides:\n - Complete schema definitions for all supported widgets\n - Required and optional fields for each widget type\n - Data type specifications and validation rules\n - Detailed descriptions of widget capabilities\n \n Use this tool when you need to:\n - Understand widget configuration requirements before creating widgets\n - Validate widget settings against official schemas\n - Plan widget implementations with proper data structures\n \n The response includes JSON Schema 7 definitions that describe exactly what settings each widget type accepts."}getInputSchema(){return{}}async executeInternal(){try{const e={},a=await this.mondayApi.request(gT,e);if(!a.all_widgets_schema||0===a.all_widgets_schema.length)throw new Error("No widget schemas found - API returned empty response");const t={};let i=0;for(const e of a.all_widgets_schema)if(e?.widget_type&&e?.schema){const a="string"==typeof e.schema?JSON.parse(e.schema):e.schema,n=a?.description||a?.title||`${e.widget_type} widget for data visualization`;t[e.widget_type]={type:e.widget_type,description:n,schema:e.schema},i++}if(0===i)throw new Error("No valid widget schemas found in API response");return{content:`**Widget Schemas Retrieved Successfully!**\n\n🎯 **Available Widget Types** (${i} schemas found):\n${Object.keys(t).map((e=>`• **${e}**: ${t[e].description}`)).join("\n")}\n\n**Complete JSON Schema 7 Definitions:**\n\n${JSON.stringify(t,null,2)}\n\n**Schema Compliance Tips:**\n- All required fields MUST be provided in widget settings\n- Enum values must match exactly as specified in the schema\n- Data types must conform to the schema definitions\n- Nested objects must follow the exact structure\n\n⚡ **Next Steps:**\n- Use these schemas to validate widget settings before calling 'create_widget'\n- Reference the schema structure when planning widget configurations\n- Ensure 100% compliance with field requirements and data types`}}catch(e){const a=e instanceof Error?e.message:String(e);throw new Error(`Failed to fetch widget schemas: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="create_widget",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Widget",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new widget in a dashboard or board view with specific configuration settings.\n \n This tool creates data visualization widgets that display information from monday.com boards:\n **Parent Containers:**\n - **DASHBOARD**: Place widget in a dashboard (most common use case)\n - **BOARD_VIEW**: Place widget in a specific board view\n \n **Critical Requirements:**\n 1. **Schema Compliance**: Widget settings MUST conform to the JSON schema for the specific widget type\n 2. **Use all_widgets_schema first**: Always fetch widget schemas before creating widgets\n 3. **Validate settings**: Ensure all required fields are provided and data types match\n \n **Workflow:**\n 1. Use 'all_widgets_schema' to get schema definitions\n 2. Prepare widget settings according to the schema\n 3. Use this tool to create the widget"}getInputSchema(){return xT}async executeInternal(e){try{const a={parent:{kind:e.parent_container_type,id:e.parent_container_id.toString()},kind:e.widget_kind,name:e.widget_name,settings:e.settings},t=await this.mondayApi.request(yT,a);if(!t.create_widget)throw new Error("Failed to create widget");const i=t.create_widget,n=i.parent?.kind===Jg.Dashboard?`dashboard ${i.parent.id}`:`board view ${i.parent?.id}`;return{content:`✅ Widget "${i.name}" successfully created!\n\n**Widget Details:**\n• **ID**: ${i.id}\n• **Name**: ${i.name}\n• **Type**: ${i.kind}\n• **Location**: Placed in ${n}\n\n**Widget Configuration:**\n• **Settings Applied**: ${JSON.stringify(e.settings,null,2)}`}}catch(a){const t=a instanceof Error?a.message:String(a);throw new Error(`Failed to create ${e.widget_kind} widget: ${t}`)}}}],$T=[...CT,...R];exports.allGraphqlApiTools=CT,exports.allMondayAppsTools=R,exports.allTools=$T;
|
|
1300
|
+
`),i=await this.mondayApi.request(t);if(!i.__type)return{content:`Type '${e.typeName}' not found in the GraphQL schema. Please check the type name and try again.`};let n=`## Type: ${i.__type.name||"Unnamed"} ${e.typeName===i.__type.name?"":`(queried: ${e.typeName})`}\nKind: ${i.__type.kind}\n${i.__type.description?`Description: ${i.__type.description}`:""}\n\n`;return i.__type.fields&&i.__type.fields.length>0&&(n+="## Fields\n",i.__type.fields.forEach((e=>{const a=B_(e.type);n+=`- ${e.name}: ${a}${e.description?` - ${e.description}`:""}\n`,e.args&&e.args.length>0&&(n+=" Arguments:\n",e.args.forEach((e=>{const a=B_(e.type);n+=` - ${e.name}: ${a}${e.description?` - ${e.description}`:""}${e.defaultValue?` (default: ${e.defaultValue})`:""}\n`})))})),n+="\n"),i.__type.inputFields&&i.__type.inputFields.length>0&&(n+="## Input Fields\n",i.__type.inputFields.forEach((e=>{const a=B_(e.type);n+=`- ${e.name}: ${a}${e.description?` - ${e.description}`:""}${e.defaultValue?` (default: ${e.defaultValue})`:""}\n`})),n+="\n"),i.__type.interfaces&&i.__type.interfaces.length>0&&(n+="## Implements\n",i.__type.interfaces.forEach((e=>{n+=`- ${e.name}\n`})),n+="\n"),i.__type.enumValues&&i.__type.enumValues.length>0&&(n+="## Enum Values\n",i.__type.enumValues.forEach((e=>{n+=`- ${e.name}${e.description?` - ${e.description}`:""}\n`})),n+="\n"),i.__type.possibleTypes&&i.__type.possibleTypes.length>0&&(n+="## Possible Types\n",i.__type.possibleTypes.forEach((e=>{n+=`- ${e.name}\n`}))),n+=`\n## Usage Examples\nIf this is a Query or Mutation field, you can use it in the all_monday_api tool.\n\nExample for query:\nall_monday_api(operation: "query", name: "getTypeData", variables: "{\\"typeName\\": \\"${i.__type.name}\\"}")\n\nExample for object field access:\nWhen querying objects that have this type, include these fields in your query.\n`,{content:n}}catch(e){const a=e instanceof Error?e.message:"Unknown error",t=a.includes("JSON");return{content:`Error fetching type details: ${a}${t?"\n\nThis could be because the type name is incorrect or the GraphQL query format is invalid. Please check the type name and try again.":""}`}}var a}},class extends Zm{constructor(){super(...arguments),this.name="create_custom_activity",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Custom Activity",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new custom activity in the E&A app"}getInputSchema(){return b_}async executeInternal(e){const a={color:e.color,icon_id:e.icon_id,name:e.name};return await this.mondayApi.request(Cw,a),{content:`Custom activity '${e.name}' with color ${e.color} and icon ${e.icon_id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_timeline_item",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Timeline Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new timeline item in the E&A app"}getInputSchema(){return T_}async executeInternal(e){const a={item_id:e.item_id.toString(),custom_activity_id:e.custom_activity_id,title:e.title,timestamp:e.timestamp,summary:e.summary,content:e.content,location:e.location,phone:e.phone,url:e.url};e.start_timestamp&&e.end_timestamp&&(a.time_range={start_timestamp:e.start_timestamp,end_timestamp:e.end_timestamp});const t=await this.mondayApi.request($w,a);return{content:`Timeline item '${e.title}' with ID ${t.create_timeline_item?.id} successfully created on item ${e.item_id}`}}},class extends Zm{constructor(){super(...arguments),this.name="fetch_custom_activity",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Fetch Custom Activities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get custom activities from the E&A app"}getInputSchema(){return A_}async executeInternal(e){const a=await this.mondayApi.request(Lw);if(!a.custom_activity||0===a.custom_activity.length)return{content:"No custom activities found"};const t=a.custom_activity.map((e=>({id:e.id,name:e.name,color:e.color,icon_id:e.icon_id,type:e.type})));return{content:`Found ${t.length} custom activities: ${JSON.stringify(t,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="read_docs",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Read Documents",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Get a collection of monday.com documents with their content as markdown. \n\nPAGINATION: \n- Default limit is 25 documents per page\n- Use 'page' parameter to get additional pages (starts at 1)\n- Check response for 'has_more_pages' to know if you should continue paginating\n- If user asks for \"all documents\" and you get exactly 25 results, continue with page 2, 3, etc.\n\nFILTERING: Provide a type value and array of ids:\n- type: 'ids' for specific document IDs\n- type: 'object_ids' for specific document object IDs \n- type: 'workspace_ids' for all docs in specific workspaces\n- ids: array of ID strings (at least 1 required)\n\nExamples:\n- { type: 'ids', ids: ['123', '456'] }\n- { type: 'object_ids', ids: ['123'] }\n- { type: 'workspace_ids', ids: ['ws_101'] }\n\nUSAGE PATTERNS:\n- For specific documents: use type 'ids' or 'object_ids' (A monday doc has two unique identifiers)\n- For workspace exploration: use type 'workspace_ids' with pagination\n- For large searches: start with page 1, then paginate if has_more_pages=true"}getInputSchema(){return lT}async executeInternal(e){try{let a,t,i;switch(e.type){case"ids":a=e.ids;break;case"object_ids":t=e.ids;break;case"workspace_ids":i=e.ids}const n={ids:a,object_ids:t,limit:e.limit||25,order_by:e.order_by,page:e.page,workspace_ids:i};let o=await this.mondayApi.request(Uw,n);if((!o.docs||0===o.docs.length)&&a){const t={ids:void 0,object_ids:a,limit:e.limit||25,order_by:e.order_by,page:e.page,workspace_ids:i};o=await this.mondayApi.request(Uw,t)}if(!o.docs||0===o.docs.length){return{content:`No documents found matching the specified criteria${e.page?` (page ${e.page})`:""}.`}}const s=await this.enrichDocsWithMarkdown(o.docs,n),p=this.shouldSuggestPagination(o.docs.length,n.limit||25,n.page||1);return{content:s.content+p}}catch(e){return{content:`Error reading documents: ${e instanceof Error?e.message:"Unknown error occurred"}`}}}shouldSuggestPagination(e,a,t){return e===a?`\n\n🔄 PAGINATION SUGGESTION: You received exactly ${a} documents, which suggests there may be more. Consider calling this tool again with page: ${t+1} to get additional documents.`:""}async enrichDocsWithMarkdown(e,a){const t=await Promise.all(e.filter((e=>null!==e)).map((async e=>{let a="";try{const t={docId:e.id},i=await this.mondayApi.request(Bw,t);a=i.export_markdown_from_doc.success&&i.export_markdown_from_doc.markdown?i.export_markdown_from_doc.markdown:`Error getting markdown: ${i.export_markdown_from_doc.error||"Unknown error"}`}catch(e){a=`Error getting markdown: ${e instanceof Error?e.message:"Unknown error"}`}return{id:e.id,object_id:e.object_id,name:e.name,doc_kind:e.doc_kind,created_at:e.created_at,created_by:e.created_by?.name||"Unknown",url:e.url,relative_url:e.relative_url,workspace:e.workspace?.name||"Unknown",workspace_id:e.workspace_id,doc_folder_id:e.doc_folder_id,settings:e.settings,blocks_as_markdown:a}}))),i=a.page||1,n=a.limit||25,o=t.length,s=o===n;return{content:`Successfully retrieved ${t.length} document${1===t.length?"":"s"}.\n\nPAGINATION INFO:\n- Current page: ${i}\n- Documents per page: ${n}\n- Documents in this response: ${o}\n- Has more pages: ${s?"YES - call again with page: "+(i+1):"NO"}\n\nDOCUMENTS:\n${JSON.stringify(t,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="workspace_info",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get Workspace Information",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"This tool returns the boards, docs and folders in a workspace and which folder they are in. It returns up to 100 of each object type, if you receive 100 assume there are additional objects of that type in the workspace."}getInputSchema(){return cT}async executeInternal(e){const a={workspace_id:e.workspace_id},t=await this.mondayApi.request(Mw,a);if(!t.workspaces||0===t.workspaces.length)return{content:`No workspace found with ID ${e.workspace_id}`};const i=function(e){const{workspaces:a,boards:t,docs:i,folders:n}=e,o=a?.[0];if(!o)throw new Error("No workspace found");const s=new Map((n||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).map((e=>[e.id,{id:e.id,name:e.name,boards:[],docs:[]}]))),p=[];(t||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).forEach((e=>{const a={id:e.id,name:e.name};e.board_folder_id&&s.has(e.board_folder_id)?s.get(e.board_folder_id).boards.push(a):p.push(a)}));const r=[];return(i||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name)).forEach((e=>{const a={id:e.id,name:e.name};e.doc_folder_id&&s.has(e.doc_folder_id)?s.get(e.doc_folder_id).docs.push(a):r.push(a)})),{workspace:{id:o.id,name:o.name,description:o.description||"",kind:o.kind||"",created_at:o.created_at||"",state:o.state||"",is_default_workspace:o.is_default_workspace||!1,owners_subscribers:(o.owners_subscribers||[]).filter((e=>null!=e&&null!=e.id&&null!=e.name&&null!=e.email)).map((e=>({id:e.id,name:e.name,email:e.email})))},folders:Array.from(s.values()),root_items:{boards:p,docs:r}}}(t);return{content:`Workspace Information:\n\n**Workspace:** ${i.workspace.name} (ID: ${i.workspace.id})\n- Description: ${i.workspace.description||"No description"}\n- Kind: ${i.workspace.kind}\n- State: ${i.workspace.state}\n- Default Workspace: ${i.workspace.is_default_workspace?"Yes":"No"}\n- Created: ${i.workspace.created_at}\n- Owners/Subscribers: ${i.workspace.owners_subscribers.length} users\n\n**Folders (${i.folders.length}):**\n${i.folders.map((e=>`\n📁 ${e.name} (ID: ${e.id})\n - Boards (${e.boards.length}): ${e.boards.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n - Docs (${e.docs.length}): ${e.docs.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}`)).join("\n")}\n\n**Root Level Items:**\n- Boards (${i.root_items.boards.length}): ${i.root_items.boards.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n- Docs (${i.root_items.docs.length}): ${i.root_items.docs.map((e=>`${e.name} (${e.id})`)).join(", ")||"None"}\n\n**Summary:**\n- Total Folders: ${i.folders.length}\n- Total Boards: ${i.folders.reduce(((e,a)=>e+a.boards.length),0)+i.root_items.boards.length}\n- Total Docs: ${i.folders.reduce(((e,a)=>e+a.docs.length),0)+i.root_items.docs.length}\n\n${JSON.stringify(i,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="list_workspaces",this.type=exports.ToolType.READ,this.annotations=Xm({title:"List Workspaces",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"List all workspaces available to the user. Returns up to 500 workspaces with their ID, name, and description."}getInputSchema(){return uT}async executeInternal(e){const a={limit:5e3},t=await this.mondayApi.request(mT,a);if(!t.workspaces||0===t.workspaces.length)return{content:"No workspaces found."};const i=t.workspaces.filter((e=>null!==e)).map((e=>{const a=e.description?` - ${e.description}`:"";return`• **${e.name}** (ID: ${e.id})${a}`})).join("\n");return{content:`**Available Workspaces (${t.workspaces.length}):**\n\n${i}\n\n**Summary:**\nTotal workspaces found: ${t.workspaces.length}\n\n${JSON.stringify(t.workspaces,null,2)}`}}},class extends Zm{constructor(){super(...arguments),this.name="create_doc",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Document",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return'Create a new monday.com doc either inside a workspace or attached to an item (via a doc column). After creation, the provided markdown will be appended to the document.\n\nLOCATION TYPES:\n- workspace: Creates a document in a workspace (requires workspace_id, optional doc_kind, optional folder_id)\n- item: Creates a document attached to an item (requires item_id, optional column_id)\n\nUSAGE EXAMPLES:\n- Workspace doc: { location: { type: "workspace", workspace_id: 123, doc_kind: "private" }, markdown: "..." }\n- Workspace doc in folder: { location: { type: "workspace", workspace_id: 123, folder_id: 17264196 }, markdown: "..." }\n- Item doc: { location: { type: "item", item_id: 456, column_id: "doc_col_1" }, markdown: "..." }'}getInputSchema(){return hT}async executeInternal(e){try{let a,t;if(e.location.type===fT.enum.workspace){const i={location:{workspace:{workspace_id:e.location.workspace_id.toString(),name:e.doc_name,kind:e.location.doc_kind||wb.Public,folder_id:e.location.folder_id?.toString()}}},n=await this.mondayApi.request(jw,i);a=n?.create_doc?.id??void 0,t=n?.create_doc?.url??void 0}else if(e.location.type===fT.enum.item){const i={itemId:e.location.item_id.toString()},n=await this.mondayApi.request(Fw,i),o=n.items?.[0];if(!o)return{content:`Error: Item with id ${e.location.item_id} not found.`};const s=o.board?.id,p=o.board?.columns?.find((e=>e&&e.type===Rb.Doc));let r=e.location.column_id;if(!r)if(p)r=p.id;else{const e={boardId:s.toString(),columnType:Rb.Doc,columnTitle:"Doc"},a=await this.mondayApi.request(Dw,e);if(r=a?.create_column?.id,!r)return{content:"Error: Failed to create doc column."}}const d={location:{board:{item_id:e.location.item_id.toString(),column_id:r}}},l=await this.mondayApi.request(jw,d);if(a=l.create_doc?.id??void 0,t=l.create_doc?.url??void 0,e.doc_name&&a)try{const t={docId:a,name:e.doc_name};await this.mondayApi.request(Pw,t)}catch(e){console.warn("Failed to update doc name:",e)}}if(!a)return{content:"Error: Failed to create document."};const i={docId:a,markdown:e.markdown},n=await this.mondayApi.request(Vw,i),o=n?.add_content_to_doc_from_markdown?.success,s=n?.add_content_to_doc_from_markdown?.error;return o?{content:`✅ Document successfully created (id: ${a}). ${t?`\n\nURL: ${t}`:""}`}:{content:`Document ${a} created, but failed to add markdown content: ${s||"Unknown error"}`}}catch(e){return{content:`Error creating document: ${e instanceof Error?e.message:"Unknown error"}`}}}},class extends Zm{constructor(){super(...arguments),this.name="update_workspace",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Workspace",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Update an existing workspace in monday.com"}getInputSchema(){return _T}async executeInternal(e){const a={id:e.id,attributes:e.attributes},t=await this.mondayApi.request(xT,a);return{content:`Workspace ${t.update_workspace?.id} successfully updated`}}},class extends Zm{constructor(){super(...arguments),this.name="update_folder",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Update Folder",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Update an existing folder in monday.com"}getInputSchema(){return ET}async executeInternal(e){const a={folderId:e.folderId,name:e.name,color:e.color,fontWeight:e.fontWeight,customIcon:e.customIcon,parentFolderId:e.parentFolderId,workspaceId:e.workspaceId,accountProductId:e.accountProductId,position:e.position},t=await this.mondayApi.request(TT,a);return{content:`Folder ${t.update_folder?.id} successfully updated`}}},class extends Zm{constructor(){super(...arguments),this.name="create_workspace",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Workspace",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new workspace in monday.com"}getInputSchema(){return IT}async executeInternal(e){const a={name:e.name,workspaceKind:e.workspaceKind,description:e.description,accountProductId:e.accountProductId},t=await this.mondayApi.request(NT,a);return{content:`Workspace ${t.create_workspace?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="create_folder",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Folder",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new folder in a monday.com workspace"}getInputSchema(){return AT}async executeInternal(e){const a={workspaceId:e.workspaceId,name:e.name,color:e.color,fontWeight:e.fontWeight,customIcon:e.customIcon,parentFolderId:e.parentFolderId},t=await this.mondayApi.request(ST,a);return{content:`Folder ${t.create_folder?.id} successfully created`}}},class extends Zm{constructor(){super(...arguments),this.name="move_object",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Move Object",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Move a folder, board, or overview in monday.com. Use `position` for relative placement based on another object, `parentFolderId` for folder changes, `workspaceId` for workspace moves, and `accountProductId` for account product changes."}getInputSchema(){return kT}async executeUpdateFolder(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={folderId:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o},p=await this.mondayApi.request(TT,s);return{content:`Object ${p.update_folder?.id} successfully moved`}}async executeUpdateBoardHierarchy(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={boardId:a,attributes:{position:t,folder_id:i,workspace_id:n,account_product_id:o}},p=await this.mondayApi.request(DT,s);return p.update_board_hierarchy?.success?{content:`Board ${p.update_board_hierarchy?.board?.id} position updated successfully`}:{content:`Board position updated failed: ${p.update_board_hierarchy?.message}`}}async executeUpdateOverviewHierarchy(e){const{id:a,position:t,parentFolderId:i,workspaceId:n,accountProductId:o}=e,s={overviewId:a,attributes:{position:t,folder_id:i,workspace_id:n,account_product_id:o}},p=await this.mondayApi.request(OT,s);return p.update_overview_hierarchy?.success?{content:`Overview ${p.update_overview_hierarchy?.overview?.id} position updated successfully`}:{content:`Overview position updated failed: ${p.update_overview_hierarchy?.message}`}}async executeInternal(e){const{objectType:a}=e;switch(a){case Eg.Folder:return this.executeUpdateFolder(e);case Eg.Board:return this.executeUpdateBoardHierarchy(e);case Eg.Overview:return this.executeUpdateOverviewHierarchy(e);default:throw new Error(`Unsupported object type: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="create_dashboard",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Dashboard",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Use this tool to create a new monday.com dashboard that aggregates data from one or more boards. \n Dashboards provide visual representations of board data through widgets and charts.\n \n Use this tool when users want to:\n - Create a dashboard to visualize board data\n - Aggregate information from multiple boards\n - Set up a data visualization container for widgets"}getInputSchema(){return yT}async executeInternal(e){try{const a={name:e.name,workspace_id:e.workspace_id.toString(),board_ids:e.board_ids,kind:e.kind,board_folder_id:e.board_folder_id?.toString()},t=await this.mondayApi.request(vT,a);if(!t.create_dashboard)throw new Error("Failed to create dashboard");const i=t.create_dashboard,n=i.board_folder_id?` in folder ${i.board_folder_id}`:" in workspace root",o=i.kind===Fb.Public?"(visible to all workspace members)":"(private - visible only to invited users)";return{content:`✅ Dashboard "${i.name}" successfully created!\n\nDashboard Details:\n• ID: ${i.id}\n• Name: ${i.name}\n• Workspace ID: ${i.workspace_id}${n}\n• Visibility: ${i.kind} ${o}\n• Connected Boards: ${e.board_ids.length} board(s)\n\nNext Steps:\n1. Use 'all_widgets_schema' to understand available widget types\n2. Understand the connected boards structure, columns, and metadata. Map board ids to column ids\n3. Plan Domain-Beneficial Widgets - Strategic widget planning based on real data analysis\n4. Use 'create_widget' to add widgets to the dashboard`}}catch(e){const a=e instanceof Error?e.message:String(e);throw new Error(`Failed to create dashboard: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="all_widgets_schema",this.type=exports.ToolType.READ,this.annotations=Xm({title:"Get All Widget Schemas",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0})}getDescription(){return"Fetch complete JSON Schema 7 definitions for all available widget types in monday.com.\n \n This tool is essential before creating widgets as it provides:\n - Complete schema definitions for all supported widgets\n - Required and optional fields for each widget type\n - Data type specifications and validation rules\n - Detailed descriptions of widget capabilities\n \n Use this tool when you need to:\n - Understand widget configuration requirements before creating widgets\n - Validate widget settings against official schemas\n - Plan widget implementations with proper data structures\n \n The response includes JSON Schema 7 definitions that describe exactly what settings each widget type accepts."}getInputSchema(){return{}}async executeInternal(){try{const e={},a=await this.mondayApi.request(bT,e);if(!a.all_widgets_schema||0===a.all_widgets_schema.length)throw new Error("No widget schemas found - API returned empty response");const t={};let i=0;for(const e of a.all_widgets_schema)if(e?.widget_type&&e?.schema){const a="string"==typeof e.schema?JSON.parse(e.schema):e.schema,n=a?.description||a?.title||`${e.widget_type} widget for data visualization`;t[e.widget_type]={type:e.widget_type,description:n,schema:e.schema},i++}if(0===i)throw new Error("No valid widget schemas found in API response");return{content:`**Widget Schemas Retrieved Successfully!**\n\n🎯 **Available Widget Types** (${i} schemas found):\n${Object.keys(t).map((e=>`• **${e}**: ${t[e].description}`)).join("\n")}\n\n**Complete JSON Schema 7 Definitions:**\n\n${JSON.stringify(t,null,2)}\n\n**Schema Compliance Tips:**\n- All required fields MUST be provided in widget settings\n- Enum values must match exactly as specified in the schema\n- Data types must conform to the schema definitions\n- Nested objects must follow the exact structure\n\n⚡ **Next Steps:**\n- Use these schemas to validate widget settings before calling 'create_widget'\n- Reference the schema structure when planning widget configurations\n- Ensure 100% compliance with field requirements and data types`}}catch(e){const a=e instanceof Error?e.message:String(e);throw new Error(`Failed to fetch widget schemas: ${a}`)}}},class extends Zm{constructor(){super(...arguments),this.name="create_widget",this.type=exports.ToolType.WRITE,this.annotations=Xm({title:"Create Widget",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1})}getDescription(){return"Create a new widget in a dashboard or board view with specific configuration settings.\n \n This tool creates data visualization widgets that display information from monday.com boards:\n **Parent Containers:**\n - **DASHBOARD**: Place widget in a dashboard (most common use case)\n - **BOARD_VIEW**: Place widget in a specific board view\n \n **Critical Requirements:**\n 1. **Schema Compliance**: Widget settings MUST conform to the JSON schema for the specific widget type\n 2. **Use all_widgets_schema first**: Always fetch widget schemas before creating widgets\n 3. **Validate settings**: Ensure all required fields are provided and data types match\n \n **Workflow:**\n 1. Use 'all_widgets_schema' to get schema definitions\n 2. Prepare widget settings according to the schema\n 3. Use this tool to create the widget"}getInputSchema(){return wT}async executeInternal(e){try{const a={parent:{kind:e.parent_container_type,id:e.parent_container_id.toString()},kind:e.widget_kind,name:e.widget_name,settings:e.settings},t=await this.mondayApi.request(gT,a);if(!t.create_widget)throw new Error("Failed to create widget");const i=t.create_widget,n=i.parent?.kind===Jg.Dashboard?`dashboard ${i.parent.id}`:`board view ${i.parent?.id}`;return{content:`✅ Widget "${i.name}" successfully created!\n\n**Widget Details:**\n• **ID**: ${i.id}\n• **Name**: ${i.name}\n• **Type**: ${i.kind}\n• **Location**: Placed in ${n}\n\n**Widget Configuration:**\n• **Settings Applied**: ${JSON.stringify(e.settings,null,2)}`}}catch(a){const t=a instanceof Error?a.message:String(a);throw new Error(`Failed to create ${e.widget_kind} widget: ${t}`)}}}],CT=[...RT,...R];exports.allGraphqlApiTools=RT,exports.allMondayAppsTools=R,exports.allTools=CT;
|
|
1301
1301
|
//# sourceMappingURL=index.js.map
|