@mcp-s/connectors 0.0.20261022190708 → 0.0.20261024071613

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.
@@ -1 +1 @@
1
- {"id":"monday","status":"active","internal_status":"tool-works","applications":["monday"],"definition":{"display":{"name":"Monday","description":"Monday is a project management tool.","icon":"monday.svg","website":"https://monday.com","category":"project-management-issue-tracking","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/monday"},"api":{"base_url":"https://api.monday.com/v2"},"auth":{"methods":{"apiKey":{"authorizationMapping":"\"Bearer \"&token"},"oauth":{"authUrl":"https://auth.monday.com/oauth2/authorize","tokenUrl":"https://auth.monday.com/oauth2/token","scopes":["account:read","assets:read","boards:read","boards:write","docs:read","docs:write","me:read","notifications:write","tags:read","teams:read","teams:write","updates:read","updates:write","users:read","users:write","webhooks:read","webhooks:write","workspaces:read","workspaces:write","departments:read","departments:write"],"defaultScopes":["boards:read","boards:write","updates:write","users:read"],"codeExchangeConfig":{"modelCredentialsMapping":"{\"access_token\": access_token, \"scope\": scope}","isForm":false}}}},"tools":[{"name":"All Monday API","description":"Execute any Monday.com API operation by generating GraphQL queries and mutations dynamically. Make sure you ask only for the fields you need and nothing more. When providing the query/mutation - use get_graphql_schema and get_type_details tools first to understand the schema before crafting your query.","slug":"all_monday_api","ai_risk":{"level":"medium","score":5,"reasoning":"This tool can execute any Monday.com API operation, including potentially destructive actions, making it a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"risk":"mid","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Query to execute"},"variables":{"type":"object","description":"Variables to pass to the query","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": arguments.query,\n \"variables\": arguments.variables\n }"}}},{"name":"Get GraphQL Schema","description":"Introspect Monday.com GraphQL schema to understand available types, queries, and mutations","slug":"get_graphql_schema","ai_risk":{"level":"low","score":2,"reasoning":"This tool introspects the GraphQL schema, which is read-only and poses low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","properties":{}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getGraphQLSchema { __schema { queryType { name } mutationType { name } types { name kind } } queryType: __type(name: \\\"Query\\\") { name fields { name description type { name kind ofType { name kind ofType { name kind } } } } } mutationType: __type(name: \\\"Mutation\\\") { name fields { name description type { name kind ofType { name kind ofType { name kind } } } } } }\"\n }"}}},{"name":"Get Type Details","description":"Get detailed information about a specific GraphQL type including fields, input formats, and enum values. Essential for understanding column value formats before updating items.","slug":"get_type_details","ai_risk":{"level":"low","score":2,"reasoning":"This tool retrieves details about GraphQL types, functioning in a read-only capacity and thus is low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["typeName"],"properties":{"typeName":{"type":"string","description":"GraphQL type name to inspect (e.g., 'ColumnValue', 'StatusValue', 'LinkValue')"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getTypeDetails($typeName: String!) { __type(name: $typeName) { name description kind fields { name description type { name kind ofType { name kind ofType { name kind ofType { name kind ofType { name kind } } } } } args { name description type { name kind ofType { name kind ofType { name kind ofType { name kind } } } } defaultValue } } inputFields { name description type { name kind ofType { name kind ofType { name kind ofType { name kind ofType { name kind } } } } } defaultValue } interfaces { name } enumValues { name description } possibleTypes { name } } }\",\n \"variables\": {\n \"typeName\": arguments.typeName\n }\n }"}}},{"name":"Create Item","description":"Create a new item in a Monday.com board. Column values must be provided as JSON strings with proper formatting for each column type. Use get_board_schema to get column IDs first.","slug":"create_item","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new item in a project management tool is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["boardId","itemName"],"properties":{"boardId":{"type":"string","description":"Board ID"},"itemName":{"type":"string","description":"Item name (appears in the 'Name' column)"},"groupId":{"type":"string","description":"Group ID (optional) - if not provided, item will be added to the first group"},"columnValues":{"type":"object","description":"Column values as JSON object (optional). Format varies by column type: text columns use simple strings, status columns use {\"label\": \"value\"}, link columns use {\"url\": \"https://...\", \"text\": \"display text\"}, people columns use {\"personsAndTeams\": [{\"id\": userId, \"kind\": \"person\"}]}, number columns use simple numbers. Use get_board_schema to get column IDs and types.","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createItem($boardId: ID!, $itemName: String!, $groupId: String, $columnValues: JSON) { create_item(board_id: $boardId, item_name: $itemName, group_id: $groupId, column_values: $columnValues) { id name } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"itemName\": arguments.itemName,\n \"groupId\": arguments.groupId,\n \"columnValues\": arguments.columnValues\n }\n }"}}},{"name":"Delete Item","description":"Delete an item from Monday.com. This action is permanent and cannot be undone.","slug":"delete_item","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes an item, which is irreversible and poses a high risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Item ID to delete"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation DeleteItem($id: ID!) { delete_item(item_id: $id) { id } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n }"}}},{"name":"Search Board Items by Name","description":"Search for items in a specific board by name using text matching. Returns items that contain the search term in their name.","slug":"search_board_items_by_name","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for items, posing minimal risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId","term"],"properties":{"boardId":{"type":"string","description":"Board ID to search within"},"term":{"type":"string","description":"Search term to look for in item names"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query GetBoardItemsByName($boardId: ID!, $term: CompareValue!) { boards(ids: [$boardId]) { items_page(query_params: { rules: [{ column_id: \\\"name\\\", operator: contains_text, compare_value: $term }] }) { items { id name } } } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"term\": arguments.term\n }\n }"}}},{"name":"Update Item Column Values","description":"Update column values for an existing item. Column values must be provided as a JSON string with proper formatting for each column type. Status columns use {\"label\": \"value\"}, link columns use {\"url\": \"https://...\", \"text\": \"display text\"}, people columns use {\"personsAndTeams\": [{\"id\": userId, \"kind\": \"person\"}]}, date columns use {\"date\": \"YYYY-MM-DD\"}, numbers use simple numeric values.","slug":"update_item_column_values","ai_risk":{"level":"medium","score":5,"reasoning":"Updating column values for an existing item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId","itemId","columnValues"],"properties":{"boardId":{"type":"string","description":"Board ID containing the item"},"itemId":{"type":"string","description":"Item ID to update"},"columnValues":{"type":"string","description":"Column values as a JSON-encoded string in the format: \"{\\\"columnId\\\": {\\\"field\\\": \\\"value\\\"}}\" - the entire value must be JSON stringified. Use get_board_schema to get column IDs and types, then get_type_details to understand the expected value format for each column type."}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation changeItemColumnValues($boardId: ID!, $itemId: ID!, $columnValues: JSON!) { change_multiple_column_values(board_id: $boardId, item_id: $itemId, column_values: $columnValues) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"itemId\": arguments.itemId,\n \"columnValues\": arguments.columnValues\n }\n }"}}},{"name":"Move Item to Group","description":"Move an item to a different group within the same board. Use get_board_schema to see available groups.","slug":"move_item_to_group","ai_risk":{"level":"low","score":4,"reasoning":"Moving an item to a different group is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["itemId","groupId"],"properties":{"itemId":{"type":"string","description":"Item ID to move"},"groupId":{"type":"string","description":"Target group ID where the item should be moved"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation moveItemToGroup($itemId: ID!, $groupId: String!) { move_item_to_group(item_id: $itemId, group_id: $groupId) { id } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"groupId\": arguments.groupId\n }\n }"}}},{"name":"Create Update","description":"Create an update (comment) for an item. Updates appear in the item's activity feed and can include mentions, formatting, and attachments.","slug":"create_update","ai_risk":{"level":"low","score":4,"reasoning":"Creating an update for an item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["itemId","body"],"properties":{"itemId":{"type":"string","description":"Item ID to add the update to"},"body":{"type":"string","description":"Update body text - supports basic HTML formatting and @mentions"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createUpdate($itemId: ID!, $body: String!) { create_update(item_id: $itemId, body: $body) { id } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"body\": arguments.body\n }\n }"}}},{"name":"Get Board Schema","description":"Get the complete schema of a board including all groups and columns with their IDs, types, and titles. Essential for understanding the board structure before creating or updating items.","slug":"get_board_schema","ai_risk":{"level":"low","score":2,"reasoning":"This tool retrieves the schema of a board in a read-only manner, posing low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId"],"properties":{"boardId":{"type":"string","description":"Board ID to get schema for"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getBoardSchema($boardId: ID!) { boards(ids: [$boardId]) { groups { id title } columns { id type title } } }\",\n \"variables\": {\n \"boardId\": arguments.boardId\n }\n }"}}},{"name":"Search Users by Name","description":"Search for users in the Monday.com account by name. Returns user IDs that can be used in people column assignments.","slug":"search_users_by_name","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for users, posing minimal risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"User name to search for (optional) - if not provided, returns all users in the account"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getUsersByName($name: String) { users(name: $name) { id name title } }\",\n \"variables\": {\n \"name\": arguments.name\n }\n }"}}},{"name":"Create Board","description":"Create a new board in Monday.com. The board will be created with default columns (Name, Person, Status, Date). Additional columns can be added using the Create Column tool.","slug":"create_board","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new board is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardKind","boardName"],"properties":{"boardKind":{"type":"string","description":"Board visibility: 'public' (visible to all account members), 'private' (visible only to specific users), or 'share' (shareable board)","enum":["public","private","share"]},"boardName":{"type":"string","description":"Board name"},"boardDescription":{"type":"string","description":"Board description (optional) - appears in board settings and helps explain the board's purpose"},"workspaceId":{"type":"string","description":"Workspace ID (optional) - if not provided, board will be created in the main workspace"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createBoard($boardKind: BoardKind!, $boardName: String!, $boardDescription: String, $workspaceId: ID) { create_board(board_kind: $boardKind, board_name: $boardName, description: $boardDescription, workspace_id: $workspaceId, empty: true) { id } }\",\n \"variables\": {\n \"boardKind\": arguments.boardKind,\n \"boardName\": arguments.boardName,\n \"boardDescription\": arguments.boardDescription,\n \"workspaceId\": arguments.workspaceId\n }\n }"}}},{"name":"Create Column","description":"Create a new column in a board. Available column types include: 'text', 'long_text', 'numbers', 'rating', 'status', 'dropdown', 'people', 'timeline', 'date', 'link', 'email', 'phone', 'location', 'file', 'checkbox', 'formula', 'auto_number', 'creation_log', 'last_updated', 'country', 'hour', 'week', 'item_id', 'vote', 'mirror', 'dependency', 'connect_boards', 'board_relation', 'tags', 'time_tracking'. Status columns may require special handling for custom labels.","slug":"create_column","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new column in a board is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardId","columnType","columnTitle"],"properties":{"boardId":{"type":"string","description":"Board ID where the column will be created"},"columnType":{"type":"string","description":"Column type - common types: 'text' (single line text), 'long_text' (multi-line text), 'numbers' (numeric values), 'status' (dropdown with colored labels), 'people' (user assignment), 'date' (date picker), 'link' (URL with display text), 'email', 'phone', 'checkbox' (true/false), 'dropdown' (custom dropdown), 'rating' (1-5 stars)"},"columnTitle":{"type":"string","description":"Column title that will be displayed in the board header"},"columnDescription":{"type":"string","description":"Column description (optional) - provides additional context about the column's purpose"},"columnSettings":{"type":"object","description":"Column settings as JSON object (optional) - used for configuring column-specific options like dropdown values, number formatting, date format, etc. Format varies by column type.","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createColumn($boardId: ID!, $columnType: ColumnType!, $columnTitle: String!, $columnDescription: String, $columnSettings: JSON) { create_column(board_id: $boardId, column_type: $columnType, title: $columnTitle, description: $columnDescription, defaults: $columnSettings) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"columnType\": arguments.columnType,\n \"columnTitle\": arguments.columnTitle,\n \"columnDescription\": arguments.columnDescription,\n \"columnSettings\": arguments.columnSettings\n }\n }"}}},{"name":"Delete Column","description":"Delete a column from a board. This action is permanent and will remove all data in that column for all items. Use with caution.","slug":"delete_column","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes a column and all its data, which is irreversible and poses a high risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardId","columnId"],"properties":{"boardId":{"type":"string","description":"Board ID containing the column"},"columnId":{"type":"string","description":"Column ID to delete - use get_board_schema to find column IDs"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation deleteColumn($boardId: ID!, $columnId: String!) { delete_column(board_id: $boardId, column_id: $columnId) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"columnId\": arguments.columnId\n }\n }"}}},{"name":"Create Custom Activity","description":"Create a custom activity type for timeline items. Custom activities allow you to categorize different types of events and actions in project timelines with specific colors and icons.","slug":"create_custom_activity","ai_risk":{"level":"low","score":4,"reasoning":"Creating a custom activity is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["color","iconId","name"],"properties":{"color":{"type":"string","description":"Activity color enum value (e.g. 'CELTIC_BLUE'). Use get_type_details with 'CustomActivityColor' to see all available options."},"iconId":{"type":"string","description":"Icon ID enum value (e.g. 'CONFERENCE'). Use get_type_details with 'CustomActivityIcon' to see all available options."},"name":{"type":"string","description":"Activity name that will be displayed in the timeline"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createCustomActivity($color: CustomActivityColor!, $iconId: CustomActivityIcon!, $name: String!) { create_custom_activity(color: $color, icon_id: $iconId, name: $name) { color icon_id name } }\",\n \"variables\": {\n \"color\": arguments.color,\n \"iconId\": arguments.iconId,\n \"name\": arguments.name\n }\n }"}}},{"name":"Create Timeline Item","description":"Create a timeline item for an item to track activities, meetings, milestones, or other time-based events. Timeline items appear in the item's timeline view and provide a chronological history of activities.","slug":"create_timeline_item","ai_risk":{"level":"low","score":4,"reasoning":"Creating a timeline item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["itemId","customActivityId","title","timestamp"],"properties":{"itemId":{"type":"string","description":"Item ID to add the timeline item to"},"customActivityId":{"type":"string","description":"Custom activity ID that categorizes this timeline item - use fetch_custom_activities to see available options or create_custom_activity to create new ones"},"title":{"type":"string","description":"Timeline item title - main description of the activity or event"},"summary":{"type":"string","description":"Brief summary (optional) - appears as a subtitle in the timeline"},"content":{"type":"string","description":"Detailed content (optional) - can include notes, details, or additional context about the activity"},"timestamp":{"type":"string","description":"ISO8601 timestamp (e.g., '2024-01-15T10:30:00Z') when the activity occurred or is scheduled"},"timeRange":{"type":"object","description":"Time range object (optional) for activities that span multiple hours/days. Use get_type_details with 'TimelineItemTimeRange' to understand the expected format.","additionalProperties":true},"location":{"type":"string","description":"Location (optional) - physical or virtual location where the activity takes place"},"phone":{"type":"string","description":"Phone number (optional) - contact number related to the activity"},"url":{"type":"string","description":"URL (optional) - relevant link such as meeting URL, document link, or reference material"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createTimelineItem($itemId: ID!, $customActivityId: String!, $title: String!, $summary: String, $content: String, $timestamp: ISO8601DateTime!, $timeRange: TimelineItemTimeRange, $location: String, $phone: String, $url: String) { create_timeline_item(item_id: $itemId, custom_activity_id: $customActivityId, title: $title, summary: $summary, content: $content, timestamp: $timestamp, time_range: $timeRange, location: $location, phone: $phone, url: $url) { id title content created_at custom_activity_id type } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"customActivityId\": arguments.customActivityId,\n \"title\": arguments.title,\n \"summary\": arguments.summary,\n \"content\": arguments.content,\n \"timestamp\": arguments.timestamp,\n \"timeRange\": arguments.timeRange,\n \"location\": arguments.location,\n \"phone\": arguments.phone,\n \"url\": arguments.url\n }\n }"}}},{"name":"Upload File to Item","description":"Upload a file (base64-encoded) and attach it to a Monday.com item's file column.","slug":"upload_file_to_item","ai_risk":{"level":"medium","score":5,"reasoning":"Uploading a file to an item is a standard operation but can be considered medium risk due to potential data exposure.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["itemId","columnId","fileName","mimeType","data"],"properties":{"itemId":{"type":"string","description":"Item ID to attach the file to"},"columnId":{"type":"string","description":"File column ID to attach the file to - use get_board_schema to find file column IDs"},"fileName":{"type":"string","description":"File name including extension (e.g. 'report.pdf')"},"mimeType":{"type":"string","description":"MIME type of the file (e.g. 'application/pdf', 'image/png')"},"data":{"type":"string","description":"Base64-encoded file content"}}},"enabled":true,"action":{"path":"/file","method":"POST","mapping":{"headers":"{ \"Content-Type\": \"multipart/form-data\" }","body":"{\n \"query\": \"mutation add_file($file: File!, $itemId: ID!, $columnId: String!) { add_file_to_column(item_id: $itemId, column_id: $columnId, file: $file) { id } }\",\n \"variables\": \"{\\\"itemId\\\": \\\"\" & arguments.itemId & \"\\\", \\\"columnId\\\": \\\"\" & arguments.columnId & \"\\\"}\",\n \"map\": \"{\\\"file\\\": \\\"variables.file\\\"}\",\n \"file\": {\n \"data\": arguments.data,\n \"mimeType\": arguments.mimeType,\n \"filename\": arguments.fileName\n }\n }"}}},{"name":"Upload File to Update","description":"Upload a file (base64-encoded) and attach it to a Monday.com item update (comment).","slug":"upload_file_to_update","ai_risk":{"level":"medium","score":5,"reasoning":"Uploading a file to an update is a standard operation but can be considered medium risk due to potential data exposure.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["updateId","fileName","mimeType","data"],"properties":{"updateId":{"type":"string","description":"Update (comment) ID to attach the file to"},"fileName":{"type":"string","description":"File name including extension (e.g. 'report.pdf')"},"mimeType":{"type":"string","description":"MIME type of the file (e.g. 'application/pdf', 'image/png')"},"data":{"type":"string","description":"Base64-encoded file content"}}},"enabled":true,"action":{"path":"/file","method":"POST","mapping":{"headers":"{ \"Content-Type\": \"multipart/form-data\" }","body":"{\n \"query\": \"mutation add_file($file: File!, $updateId: ID!) { add_file_to_update(update_id: $updateId, file: $file) { id } }\",\n \"variables\": \"{\\\"updateId\\\": \\\"\" & arguments.updateId & \"\\\"}\",\n \"map\": \"{\\\"file\\\": \\\"variables.file\\\"}\",\n \"file\": {\n \"data\": arguments.data,\n \"mimeType\": arguments.mimeType,\n \"filename\": arguments.fileName\n }\n }"}}},{"name":"Fetch Custom Activities","description":"Fetch all custom activities available in the account. Custom activities are used to categorize timeline items and provide context for different types of events and milestones.","slug":"fetch_custom_activities","ai_risk":{"level":"low","score":2,"reasoning":"This tool fetches custom activities in a read-only manner, posing low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","properties":{}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query fetchCustomActivity { custom_activity { color icon_id id name type } }\"\n }"}}}]}}
1
+ {"id":"monday","status":"active","internal_status":"tool-works","applications":["monday"],"definition":{"display":{"name":"Monday","description":"Monday is a project management tool.","icon":"monday.svg","website":"https://monday.com","category":"project-management-issue-tracking","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/monday"},"api":{"base_url":"https://api.monday.com/v2"},"auth":{"methods":{"apiKey":{"authorizationMapping":"\"Bearer \"&token"},"oauth":{"authUrl":"https://auth.monday.com/oauth2/authorize","tokenUrl":"https://auth.monday.com/oauth2/token","scopes":["account:read","assets:read","boards:read","boards:write","docs:read","docs:write","me:read","notifications:write","tags:read","teams:read","teams:write","updates:read","updates:write","users:read","users:write","webhooks:read","webhooks:write","workspaces:read","workspaces:write","departments:read","departments:write"],"defaultScopes":["boards:read","boards:write","updates:write","users:read"],"scopeTemplates":[{"id":"read-only","name":"Read-only","description":"Read boards, items, docs, updates, files, tags, teams, users and workspaces. Can't create or change anything.","scopes":["account:read","assets:read","boards:read","docs:read","me:read","tags:read","teams:read","updates:read","users:read","webhooks:read","workspaces:read","departments:read"]},{"id":"boards","name":"Boards and updates","description":"Read and edit boards and items and post updates on them. Docs, teams, webhooks and workspaces stay off.","scopes":["me:read","users:read","assets:read","boards:read","boards:write","updates:read","updates:write"]},{"id":"full-access","name":"Full access","description":"Read and write everything the connector supports: boards, docs, updates, notifications, teams, users, webhooks, workspaces and departments.","scopes":["account:read","assets:read","boards:read","boards:write","docs:read","docs:write","me:read","notifications:write","tags:read","teams:read","teams:write","updates:read","updates:write","users:read","users:write","webhooks:read","webhooks:write","workspaces:read","workspaces:write","departments:read","departments:write"]}],"codeExchangeConfig":{"modelCredentialsMapping":"{\"access_token\": access_token, \"scope\": scope}","isForm":false}}}},"tools":[{"name":"All Monday API","description":"Execute any Monday.com API operation by generating GraphQL queries and mutations dynamically. Make sure you ask only for the fields you need and nothing more. When providing the query/mutation - use get_graphql_schema and get_type_details tools first to understand the schema before crafting your query.","slug":"all_monday_api","ai_risk":{"level":"medium","score":5,"reasoning":"This tool can execute any Monday.com API operation, including potentially destructive actions, making it a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"risk":"mid","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Query to execute"},"variables":{"type":"object","description":"Variables to pass to the query","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": arguments.query,\n \"variables\": arguments.variables\n }"}}},{"name":"Get GraphQL Schema","description":"Introspect Monday.com GraphQL schema to understand available types, queries, and mutations","slug":"get_graphql_schema","ai_risk":{"level":"low","score":2,"reasoning":"This tool introspects the GraphQL schema, which is read-only and poses low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","properties":{}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getGraphQLSchema { __schema { queryType { name } mutationType { name } types { name kind } } queryType: __type(name: \\\"Query\\\") { name fields { name description type { name kind ofType { name kind ofType { name kind } } } } } mutationType: __type(name: \\\"Mutation\\\") { name fields { name description type { name kind ofType { name kind ofType { name kind } } } } } }\"\n }"}}},{"name":"Get Type Details","description":"Get detailed information about a specific GraphQL type including fields, input formats, and enum values. Essential for understanding column value formats before updating items.","slug":"get_type_details","ai_risk":{"level":"low","score":2,"reasoning":"This tool retrieves details about GraphQL types, functioning in a read-only capacity and thus is low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["typeName"],"properties":{"typeName":{"type":"string","description":"GraphQL type name to inspect (e.g., 'ColumnValue', 'StatusValue', 'LinkValue')"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getTypeDetails($typeName: String!) { __type(name: $typeName) { name description kind fields { name description type { name kind ofType { name kind ofType { name kind ofType { name kind ofType { name kind } } } } } args { name description type { name kind ofType { name kind ofType { name kind ofType { name kind } } } } defaultValue } } inputFields { name description type { name kind ofType { name kind ofType { name kind ofType { name kind ofType { name kind } } } } } defaultValue } interfaces { name } enumValues { name description } possibleTypes { name } } }\",\n \"variables\": {\n \"typeName\": arguments.typeName\n }\n }"}}},{"name":"Create Item","description":"Create a new item in a Monday.com board. Column values must be provided as JSON strings with proper formatting for each column type. Use get_board_schema to get column IDs first.","slug":"create_item","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new item in a project management tool is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["boardId","itemName"],"properties":{"boardId":{"type":"string","description":"Board ID"},"itemName":{"type":"string","description":"Item name (appears in the 'Name' column)"},"groupId":{"type":"string","description":"Group ID (optional) - if not provided, item will be added to the first group"},"columnValues":{"type":"object","description":"Column values as JSON object (optional). Format varies by column type: text columns use simple strings, status columns use {\"label\": \"value\"}, link columns use {\"url\": \"https://...\", \"text\": \"display text\"}, people columns use {\"personsAndTeams\": [{\"id\": userId, \"kind\": \"person\"}]}, number columns use simple numbers. Use get_board_schema to get column IDs and types.","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createItem($boardId: ID!, $itemName: String!, $groupId: String, $columnValues: JSON) { create_item(board_id: $boardId, item_name: $itemName, group_id: $groupId, column_values: $columnValues) { id name } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"itemName\": arguments.itemName,\n \"groupId\": arguments.groupId,\n \"columnValues\": arguments.columnValues\n }\n }"}}},{"name":"Delete Item","description":"Delete an item from Monday.com. This action is permanent and cannot be undone.","slug":"delete_item","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes an item, which is irreversible and poses a high risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Item ID to delete"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation DeleteItem($id: ID!) { delete_item(item_id: $id) { id } }\",\n \"variables\": {\n \"id\": arguments.id\n }\n }"}}},{"name":"Search Board Items by Name","description":"Search for items in a specific board by name using text matching. Returns items that contain the search term in their name.","slug":"search_board_items_by_name","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for items, posing minimal risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId","term"],"properties":{"boardId":{"type":"string","description":"Board ID to search within"},"term":{"type":"string","description":"Search term to look for in item names"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query GetBoardItemsByName($boardId: ID!, $term: CompareValue!) { boards(ids: [$boardId]) { items_page(query_params: { rules: [{ column_id: \\\"name\\\", operator: contains_text, compare_value: $term }] }) { items { id name } } } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"term\": arguments.term\n }\n }"}}},{"name":"Update Item Column Values","description":"Update column values for an existing item. Column values must be provided as a JSON string with proper formatting for each column type. Status columns use {\"label\": \"value\"}, link columns use {\"url\": \"https://...\", \"text\": \"display text\"}, people columns use {\"personsAndTeams\": [{\"id\": userId, \"kind\": \"person\"}]}, date columns use {\"date\": \"YYYY-MM-DD\"}, numbers use simple numeric values.","slug":"update_item_column_values","ai_risk":{"level":"medium","score":5,"reasoning":"Updating column values for an existing item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId","itemId","columnValues"],"properties":{"boardId":{"type":"string","description":"Board ID containing the item"},"itemId":{"type":"string","description":"Item ID to update"},"columnValues":{"type":"string","description":"Column values as a JSON-encoded string in the format: \"{\\\"columnId\\\": {\\\"field\\\": \\\"value\\\"}}\" - the entire value must be JSON stringified. Use get_board_schema to get column IDs and types, then get_type_details to understand the expected value format for each column type."}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation changeItemColumnValues($boardId: ID!, $itemId: ID!, $columnValues: JSON!) { change_multiple_column_values(board_id: $boardId, item_id: $itemId, column_values: $columnValues) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"itemId\": arguments.itemId,\n \"columnValues\": arguments.columnValues\n }\n }"}}},{"name":"Move Item to Group","description":"Move an item to a different group within the same board. Use get_board_schema to see available groups.","slug":"move_item_to_group","ai_risk":{"level":"low","score":4,"reasoning":"Moving an item to a different group is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["itemId","groupId"],"properties":{"itemId":{"type":"string","description":"Item ID to move"},"groupId":{"type":"string","description":"Target group ID where the item should be moved"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation moveItemToGroup($itemId: ID!, $groupId: String!) { move_item_to_group(item_id: $itemId, group_id: $groupId) { id } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"groupId\": arguments.groupId\n }\n }"}}},{"name":"Create Update","description":"Create an update (comment) for an item. Updates appear in the item's activity feed and can include mentions, formatting, and attachments.","slug":"create_update","ai_risk":{"level":"low","score":4,"reasoning":"Creating an update for an item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["itemId","body"],"properties":{"itemId":{"type":"string","description":"Item ID to add the update to"},"body":{"type":"string","description":"Update body text - supports basic HTML formatting and @mentions"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createUpdate($itemId: ID!, $body: String!) { create_update(item_id: $itemId, body: $body) { id } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"body\": arguments.body\n }\n }"}}},{"name":"Get Board Schema","description":"Get the complete schema of a board including all groups and columns with their IDs, types, and titles. Essential for understanding the board structure before creating or updating items.","slug":"get_board_schema","ai_risk":{"level":"low","score":2,"reasoning":"This tool retrieves the schema of a board in a read-only manner, posing low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","required":["boardId"],"properties":{"boardId":{"type":"string","description":"Board ID to get schema for"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getBoardSchema($boardId: ID!) { boards(ids: [$boardId]) { groups { id title } columns { id type title } } }\",\n \"variables\": {\n \"boardId\": arguments.boardId\n }\n }"}}},{"name":"Search Users by Name","description":"Search for users in the Monday.com account by name. Returns user IDs that can be used in people column assignments.","slug":"search_users_by_name","ai_risk":{"level":"low","score":1,"reasoning":"This tool performs a read-only search for users, posing minimal risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"User name to search for (optional) - if not provided, returns all users in the account"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query getUsersByName($name: String) { users(name: $name) { id name title } }\",\n \"variables\": {\n \"name\": arguments.name\n }\n }"}}},{"name":"Create Board","description":"Create a new board in Monday.com. The board will be created with default columns (Name, Person, Status, Date). Additional columns can be added using the Create Column tool.","slug":"create_board","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new board is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardKind","boardName"],"properties":{"boardKind":{"type":"string","description":"Board visibility: 'public' (visible to all account members), 'private' (visible only to specific users), or 'share' (shareable board)","enum":["public","private","share"]},"boardName":{"type":"string","description":"Board name"},"boardDescription":{"type":"string","description":"Board description (optional) - appears in board settings and helps explain the board's purpose"},"workspaceId":{"type":"string","description":"Workspace ID (optional) - if not provided, board will be created in the main workspace"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createBoard($boardKind: BoardKind!, $boardName: String!, $boardDescription: String, $workspaceId: ID) { create_board(board_kind: $boardKind, board_name: $boardName, description: $boardDescription, workspace_id: $workspaceId, empty: true) { id } }\",\n \"variables\": {\n \"boardKind\": arguments.boardKind,\n \"boardName\": arguments.boardName,\n \"boardDescription\": arguments.boardDescription,\n \"workspaceId\": arguments.workspaceId\n }\n }"}}},{"name":"Create Column","description":"Create a new column in a board. Available column types include: 'text', 'long_text', 'numbers', 'rating', 'status', 'dropdown', 'people', 'timeline', 'date', 'link', 'email', 'phone', 'location', 'file', 'checkbox', 'formula', 'auto_number', 'creation_log', 'last_updated', 'country', 'hour', 'week', 'item_id', 'vote', 'mirror', 'dependency', 'connect_boards', 'board_relation', 'tags', 'time_tracking'. Status columns may require special handling for custom labels.","slug":"create_column","ai_risk":{"level":"low","score":4,"reasoning":"Creating a new column in a board is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardId","columnType","columnTitle"],"properties":{"boardId":{"type":"string","description":"Board ID where the column will be created"},"columnType":{"type":"string","description":"Column type - common types: 'text' (single line text), 'long_text' (multi-line text), 'numbers' (numeric values), 'status' (dropdown with colored labels), 'people' (user assignment), 'date' (date picker), 'link' (URL with display text), 'email', 'phone', 'checkbox' (true/false), 'dropdown' (custom dropdown), 'rating' (1-5 stars)"},"columnTitle":{"type":"string","description":"Column title that will be displayed in the board header"},"columnDescription":{"type":"string","description":"Column description (optional) - provides additional context about the column's purpose"},"columnSettings":{"type":"object","description":"Column settings as JSON object (optional) - used for configuring column-specific options like dropdown values, number formatting, date format, etc. Format varies by column type.","additionalProperties":true}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createColumn($boardId: ID!, $columnType: ColumnType!, $columnTitle: String!, $columnDescription: String, $columnSettings: JSON) { create_column(board_id: $boardId, column_type: $columnType, title: $columnTitle, description: $columnDescription, defaults: $columnSettings) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"columnType\": arguments.columnType,\n \"columnTitle\": arguments.columnTitle,\n \"columnDescription\": arguments.columnDescription,\n \"columnSettings\": arguments.columnSettings\n }\n }"}}},{"name":"Delete Column","description":"Delete a column from a board. This action is permanent and will remove all data in that column for all items. Use with caution.","slug":"delete_column","ai_risk":{"level":"high","score":8,"reasoning":"This tool permanently deletes a column and all its data, which is irreversible and poses a high risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["boardId","columnId"],"properties":{"boardId":{"type":"string","description":"Board ID containing the column"},"columnId":{"type":"string","description":"Column ID to delete - use get_board_schema to find column IDs"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation deleteColumn($boardId: ID!, $columnId: String!) { delete_column(board_id: $boardId, column_id: $columnId) { id } }\",\n \"variables\": {\n \"boardId\": arguments.boardId,\n \"columnId\": arguments.columnId\n }\n }"}}},{"name":"Create Custom Activity","description":"Create a custom activity type for timeline items. Custom activities allow you to categorize different types of events and actions in project timelines with specific colors and icons.","slug":"create_custom_activity","ai_risk":{"level":"low","score":4,"reasoning":"Creating a custom activity is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["color","iconId","name"],"properties":{"color":{"type":"string","description":"Activity color enum value (e.g. 'CELTIC_BLUE'). Use get_type_details with 'CustomActivityColor' to see all available options."},"iconId":{"type":"string","description":"Icon ID enum value (e.g. 'CONFERENCE'). Use get_type_details with 'CustomActivityIcon' to see all available options."},"name":{"type":"string","description":"Activity name that will be displayed in the timeline"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createCustomActivity($color: CustomActivityColor!, $iconId: CustomActivityIcon!, $name: String!) { create_custom_activity(color: $color, icon_id: $iconId, name: $name) { color icon_id name } }\",\n \"variables\": {\n \"color\": arguments.color,\n \"iconId\": arguments.iconId,\n \"name\": arguments.name\n }\n }"}}},{"name":"Create Timeline Item","description":"Create a timeline item for an item to track activities, meetings, milestones, or other time-based events. Timeline items appear in the item's timeline view and provide a chronological history of activities.","slug":"create_timeline_item","ai_risk":{"level":"low","score":4,"reasoning":"Creating a timeline item is a standard operation, posing a medium risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","required":["itemId","customActivityId","title","timestamp"],"properties":{"itemId":{"type":"string","description":"Item ID to add the timeline item to"},"customActivityId":{"type":"string","description":"Custom activity ID that categorizes this timeline item - use fetch_custom_activities to see available options or create_custom_activity to create new ones"},"title":{"type":"string","description":"Timeline item title - main description of the activity or event"},"summary":{"type":"string","description":"Brief summary (optional) - appears as a subtitle in the timeline"},"content":{"type":"string","description":"Detailed content (optional) - can include notes, details, or additional context about the activity"},"timestamp":{"type":"string","description":"ISO8601 timestamp (e.g., '2024-01-15T10:30:00Z') when the activity occurred or is scheduled"},"timeRange":{"type":"object","description":"Time range object (optional) for activities that span multiple hours/days. Use get_type_details with 'TimelineItemTimeRange' to understand the expected format.","additionalProperties":true},"location":{"type":"string","description":"Location (optional) - physical or virtual location where the activity takes place"},"phone":{"type":"string","description":"Phone number (optional) - contact number related to the activity"},"url":{"type":"string","description":"URL (optional) - relevant link such as meeting URL, document link, or reference material"}}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"mutation createTimelineItem($itemId: ID!, $customActivityId: String!, $title: String!, $summary: String, $content: String, $timestamp: ISO8601DateTime!, $timeRange: TimelineItemTimeRange, $location: String, $phone: String, $url: String) { create_timeline_item(item_id: $itemId, custom_activity_id: $customActivityId, title: $title, summary: $summary, content: $content, timestamp: $timestamp, time_range: $timeRange, location: $location, phone: $phone, url: $url) { id title content created_at custom_activity_id type } }\",\n \"variables\": {\n \"itemId\": arguments.itemId,\n \"customActivityId\": arguments.customActivityId,\n \"title\": arguments.title,\n \"summary\": arguments.summary,\n \"content\": arguments.content,\n \"timestamp\": arguments.timestamp,\n \"timeRange\": arguments.timeRange,\n \"location\": arguments.location,\n \"phone\": arguments.phone,\n \"url\": arguments.url\n }\n }"}}},{"name":"Upload File to Item","description":"Upload a file (base64-encoded) and attach it to a Monday.com item's file column.","slug":"upload_file_to_item","ai_risk":{"level":"medium","score":5,"reasoning":"Uploading a file to an item is a standard operation but can be considered medium risk due to potential data exposure.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["itemId","columnId","fileName","mimeType","data"],"properties":{"itemId":{"type":"string","description":"Item ID to attach the file to"},"columnId":{"type":"string","description":"File column ID to attach the file to - use get_board_schema to find file column IDs"},"fileName":{"type":"string","description":"File name including extension (e.g. 'report.pdf')"},"mimeType":{"type":"string","description":"MIME type of the file (e.g. 'application/pdf', 'image/png')"},"data":{"type":"string","description":"Base64-encoded file content"}}},"enabled":true,"action":{"path":"/file","method":"POST","mapping":{"headers":"{ \"Content-Type\": \"multipart/form-data\" }","body":"{\n \"query\": \"mutation add_file($file: File!, $itemId: ID!, $columnId: String!) { add_file_to_column(item_id: $itemId, column_id: $columnId, file: $file) { id } }\",\n \"variables\": \"{\\\"itemId\\\": \\\"\" & arguments.itemId & \"\\\", \\\"columnId\\\": \\\"\" & arguments.columnId & \"\\\"}\",\n \"map\": \"{\\\"file\\\": \\\"variables.file\\\"}\",\n \"file\": {\n \"data\": arguments.data,\n \"mimeType\": arguments.mimeType,\n \"filename\": arguments.fileName\n }\n }"}}},{"name":"Upload File to Update","description":"Upload a file (base64-encoded) and attach it to a Monday.com item update (comment).","slug":"upload_file_to_update","ai_risk":{"level":"medium","score":5,"reasoning":"Uploading a file to an update is a standard operation but can be considered medium risk due to potential data exposure.","calculated_at":"2026-05-22T20:32:05.771Z"},"annotations":{"destructiveHint":true},"inputSchema":{"type":"object","required":["updateId","fileName","mimeType","data"],"properties":{"updateId":{"type":"string","description":"Update (comment) ID to attach the file to"},"fileName":{"type":"string","description":"File name including extension (e.g. 'report.pdf')"},"mimeType":{"type":"string","description":"MIME type of the file (e.g. 'application/pdf', 'image/png')"},"data":{"type":"string","description":"Base64-encoded file content"}}},"enabled":true,"action":{"path":"/file","method":"POST","mapping":{"headers":"{ \"Content-Type\": \"multipart/form-data\" }","body":"{\n \"query\": \"mutation add_file($file: File!, $updateId: ID!) { add_file_to_update(update_id: $updateId, file: $file) { id } }\",\n \"variables\": \"{\\\"updateId\\\": \\\"\" & arguments.updateId & \"\\\"}\",\n \"map\": \"{\\\"file\\\": \\\"variables.file\\\"}\",\n \"file\": {\n \"data\": arguments.data,\n \"mimeType\": arguments.mimeType,\n \"filename\": arguments.fileName\n }\n }"}}},{"name":"Fetch Custom Activities","description":"Fetch all custom activities available in the account. Custom activities are used to categorize timeline items and provide context for different types of events and milestones.","slug":"fetch_custom_activities","ai_risk":{"level":"low","score":2,"reasoning":"This tool fetches custom activities in a read-only manner, posing low risk.","calculated_at":"2026-05-22T20:32:05.771Z"},"inputSchema":{"type":"object","properties":{}},"enabled":true,"action":{"path":"/","method":"POST","mapping":{"body":"{\n \"query\": \"query fetchCustomActivity { custom_activity { color icon_id id name type } }\"\n }"}}}]}}
@@ -1 +1 @@
1
- {"id":"okta","status":"active","internal_status":"tool-works","applications":["okta"],"definition":{"display":{"name":"Okta","description":"Okta is an enterprise identity and access management platform that provides authentication, authorization, and user management.","icon":"okta.svg","website":"https://www.okta.com","category":"identity-security","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/okta"},"api":{"base_url":""},"configuration":{"type":"object","properties":{"oktaDomain":{"type":"string","title":"Okta Domain"}},"required":["oktaDomain"]},"auth":{"methods":{"apiKey":{"headerName":"Authorization","authorizationMapping":"\"SSWS \" & token"},"oauth":{"authUrlMapping":"oktaDomain & \"/oauth2/v1/authorize\"","tokenUrlMapping":"oktaDomain & \"/oauth2/v1/token\"","scopes":["offline_access","okta.users.read","okta.users.manage","okta.users.manage.self","okta.users.read.self","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage","okta.logs.read","okta.roles.read","okta.roles.manage","okta.policies.read","okta.policies.manage","okta.sessions.read","okta.sessions.manage","okta.authorizationServers.read","okta.authorizationServers.manage","okta.schemas.read","okta.schemas.manage","okta.idps.read","okta.idps.manage","okta.eventHooks.read","okta.eventHooks.manage","okta.inlineHooks.read","okta.inlineHooks.manage","okta.trustedOrigins.read","okta.trustedOrigins.manage","okta.networkZones.read","okta.networkZones.manage","okta.devices.read","okta.devices.manage","okta.authenticators.read","okta.authenticators.manage"],"defaultScopes":["offline_access","okta.users.read","okta.users.manage","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage","okta.logs.read","okta.roles.read","okta.roles.manage","okta.policies.read"],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"tools":[{"name":"List Users","description":"List all users in your Okta organization with optional filtering and pagination. Supports filtering by status (STAGED, PROVISIONED, ACTIVE, RECOVERY, LOCKED_OUT, PASSWORD_EXPIRED, SUSPENDED, DEPROVISIONED) and searching by name, email, or other profile attributes. Use this to discover users, audit accounts, or find specific users matching criteria.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists users in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Search expression to filter users (e.g., 'profile.firstName eq \"John\"' or 'profile.email sw \"john\"')"},"filter":{"type":"string","description":"Filter expression for advanced queries (e.g., 'status eq \"ACTIVE\"' or 'lastUpdated gt \"2024-01-01T00:00:00.000Z\"')"},"limit":{"type":"number","description":"Maximum number of users to return (default: 200, max: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for fetching next page of results"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"search\": arguments.search,\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.users.read"]},{"name":"Get User","description":"Get detailed information about a specific user by their ID or login email. Returns user profile, status, credentials info, and lifecycle state. Use this to retrieve complete user details for a known user.","slug":"get_user","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific user and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID (e.g., '00u1234abcd') or login email (e.g., 'user@company.com')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.users.read"]},{"name":"Search Users","description":"Search for users using advanced filter expressions. Supports complex queries with operators like eq (equals), sw (starts with), pr (present), gt (greater than), lt (less than). Examples: 'status eq \"ACTIVE\" and profile.department eq \"Engineering\"' or 'profile.lastName sw \"Smith\"'. Use this for complex user discovery scenarios.","slug":"search_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool allows for complex queries to search users and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query string (simple text search across profile fields)"},"limit":{"type":"number","description":"Maximum number of users to return (default: 200, max: 200)","default":200}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.query,\n \"limit\": arguments.limit\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.users.read"]},{"name":"Create User","description":"Create a new user in your Okta organization. Requires at minimum an email address and can optionally include full profile details, password, and activation preferences. You can create users in different states: with activation email, without activation, or as a group admin. Use this to provision new user accounts.","slug":"create_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new users in the organization, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["profile"],"properties":{"profile":{"type":"object","description":"User profile attributes","required":["email","login"],"properties":{"firstName":{"type":"string","description":"User's first name"},"lastName":{"type":"string","description":"User's last name"},"email":{"type":"string","description":"User's email address"},"login":{"type":"string","description":"User's login (usually same as email)"},"mobilePhone":{"type":"string","description":"User's mobile phone"},"secondEmail":{"type":"string","description":"User's secondary email"}}},"credentials":{"type":"object","description":"User credentials (optional)","properties":{"password":{"type":"object","properties":{"value":{"type":"string","description":"User's password"}}}}},"activate":{"type":"boolean","description":"Activate user immediately (default: true)","default":true}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"activate\": arguments.activate\n }","body":"{\n \"profile\": arguments.profile,\n \"credentials\": arguments.credentials\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.users.manage"]},{"name":"Update User","description":"Update an existing user's profile information. You can modify any profile attributes like name, email, phone, or custom attributes. This performs a partial update - only specified fields are updated. Use this to keep user information current.","slug":"update_user","ai_risk":{"level":"low","score":4,"reasoning":"This tool updates existing user profiles, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId","profile"],"properties":{"userId":{"type":"string","description":"User ID or login email to update"},"profile":{"type":"object","description":"Profile attributes to update","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"mobilePhone":{"type":"string"},"secondEmail":{"type":"string"}}}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","body":"{\n \"profile\": arguments.profile\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"Deactivate User","description":"Deactivate a user account. This changes the user's status to DEPROVISIONED and revokes all active sessions. The user will not be able to log in. User data is retained and the user can be reactivated later. Use this for offboarding or temporarily suspending access.","slug":"deactivate_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool deactivates user accounts, which is a destructive action but retains user data, thus it is medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to deactivate"},"sendEmail":{"type":"boolean","description":"Send deactivation email to user (default: false)","default":false}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/lifecycle/deactivate","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","query":"{\n \"sendEmail\": arguments.sendEmail\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"Activate User","description":"Activate a user account that is in STAGED or DEPROVISIONED status. This allows the user to authenticate and access applications. Optionally sends an activation email with a temporary token. Use this for onboarding new users or reactivating previously deactivated accounts.","slug":"activate_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool activates user accounts, which is a destructive action but allows reactivation, placing it at medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to activate"},"sendEmail":{"type":"boolean","description":"Send activation email to user (default: true)","default":true}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/lifecycle/activate","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","query":"{\n \"sendEmail\": arguments.sendEmail\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"List Groups","description":"List all groups in your Okta organization. Supports searching by name and pagination. Groups are used to organize users and assign them to applications collectively. Use this to discover groups, audit group structure, or find specific groups.","slug":"list_groups","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all groups in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search term to find groups by name"},"filter":{"type":"string","description":"Filter expression (e.g., 'type eq \"OKTA_GROUP\"' or 'lastMembershipUpdated gt \"2024-01-01T00:00:00.000Z\"')"},"limit":{"type":"number","description":"Maximum number of groups to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.q,\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.groups.read"]},{"name":"Get Group","description":"Get detailed information about a specific group including its name, description, type, and member count. Use this to retrieve complete group details for a known group ID.","slug":"get_group","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific group and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID (e.g., '00g1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.read"]},{"name":"List Group Members","description":"List all users who are members of a specific group. Returns user profiles for each member with pagination support. Use this to see who belongs to a group or audit group membership.","slug":"list_group_members","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all users in a specific group and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID to list members for"},"limit":{"type":"number","description":"Maximum number of members to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.read"]},{"name":"Create Group","description":"Create a new group in your Okta organization. Groups can be used to organize users and assign them to applications collectively. You can specify a name and optional description. Use this to set up new teams, departments, or access groups.","slug":"create_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new groups in the organization, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Name of the group"},"description":{"type":"string","description":"Optional description of the group"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","body":"{\n \"profile\": {\n \"name\": arguments.name,\n \"description\": arguments.description\n }\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.groups.manage"]},{"name":"Add User to Group","description":"Add a user to a group. This grants the user any application assignments and permissions associated with the group. The operation is idempotent - adding a user who is already a member has no effect. Use this to grant group-based access to users.","slug":"add_user_to_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool adds a user to a group, granting access based on group permissions, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId","userId"],"properties":{"groupId":{"type":"string","description":"Group ID to add the user to"},"userId":{"type":"string","description":"User ID or login email to add"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users/{userId}","method":"PUT","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId,\n \"userId\": arguments.userId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.manage"]},{"name":"Remove User from Group","description":"Remove a user from a group. This revokes any group-based application assignments and permissions. The operation is idempotent - removing a user who is not a member has no effect. Use this to revoke group-based access from users.","slug":"remove_user_from_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool removes a user from a group, revoking access, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId","userId"],"properties":{"groupId":{"type":"string","description":"Group ID to remove the user from"},"userId":{"type":"string","description":"User ID or login email to remove"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users/{userId}","method":"DELETE","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId,\n \"userId\": arguments.userId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.manage"]},{"name":"List Applications","description":"List all applications in your Okta organization. Applications represent the services and apps your users can access. Supports filtering by user assignment and pagination. Use this to discover applications, audit app inventory, or find specific apps.","slug":"list_applications","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all applications in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filter expression (e.g., 'user.id eq \"00u1234abcd\"' to show apps assigned to a user)"},"limit":{"type":"number","description":"Maximum number of apps to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.apps.read"]},{"name":"Get Application","description":"Get detailed information about a specific application including its settings, sign-on mode, and configuration. Use this to retrieve complete application details for a known app ID.","slug":"get_application","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific application and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID (e.g., '0oa1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"List Application Users","description":"List all users assigned to a specific application. Returns user assignments with app-specific credentials and profile attributes. Use this to see who has access to an application or audit app assignments.","slug":"list_application_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all users assigned to a specific application and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID to list users for"},"limit":{"type":"number","description":"Maximum number of assignments to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"List Application Groups","description":"List all groups assigned to a specific application. Group assignments allow all group members to access the application. Use this to see which groups have access to an application or audit app assignments.","slug":"list_application_groups","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all groups assigned to a specific application and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID to list groups for"},"limit":{"type":"number","description":"Maximum number of assignments to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/groups","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"Assign User to Application","description":"Assign a user to an application, granting them access. You can optionally provide app-specific credentials or profile attributes. Use this to provision user access to applications.","slug":"assign_user_to_application","ai_risk":{"level":"medium","score":5,"reasoning":"This tool assigns a user to an application, granting access, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId","userId"],"properties":{"appId":{"type":"string","description":"Application ID to assign the user to"},"userId":{"type":"string","description":"User ID or login email to assign"},"credentials":{"type":"object","description":"App-specific credentials (optional)","properties":{"userName":{"type":"string"},"password":{"type":"object","properties":{"value":{"type":"string"}}}}}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/users","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","body":"{\n \"id\": arguments.userId,\n \"credentials\": arguments.credentials\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.apps.manage"]},{"name":"Get System Logs","description":"Query system logs for audit and troubleshooting. Logs include authentication events, user lifecycle changes, policy evaluations, and administrative actions. Supports filtering by time range, event type, actor, target, and more. Use this to investigate security incidents, audit activity, or monitor system events.","slug":"get_system_logs","ai_risk":{"level":"low","score":1,"reasoning":"This tool queries system logs for audit purposes and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"Start time in ISO 8601 format (e.g., \"2024-01-01T00:00:00Z\"). Filters events after this time."},"until":{"type":"string","description":"End time in ISO 8601 format (e.g., \"2024-01-31T23:59:59Z\"). Filters events before this time."},"filter":{"type":"string","description":"Filter expression (e.g., 'eventType eq \"user.session.start\"' or 'actor.alternateId eq \"user@company.com\"')"},"q":{"type":"string","description":"Simple search query across all log fields"},"limit":{"type":"number","description":"Maximum number of log events to return (default: 100, max: 1000)","default":100},"sortOrder":{"type":"string","description":"Sort order: ASCENDING or DESCENDING (default: ASCENDING)","enum":["ASCENDING","DESCENDING"],"default":"ASCENDING"},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/logs","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"since\": arguments.since,\n \"until\": arguments.until,\n \"filter\": arguments.filter,\n \"q\": arguments.q,\n \"limit\": arguments.limit,\n \"sortOrder\": arguments.sortOrder,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.logs.read"]},{"name":"Get Log Event","description":"Get details of a specific log event by its ID. Returns the complete event including actor, target, outcome, and debug context. Use this to investigate a specific event in detail.","slug":"get_log_event","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves details of a specific log event and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["eventId"],"properties":{"eventId":{"type":"string","description":"Log event ID"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/logs","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.eventId,\n \"limit\": 1\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.logs.read"]},{"name":"List User Roles","description":"List all administrative roles assigned to a specific user. Roles grant administrative permissions like managing users, groups, or applications. Use this to audit what administrative access a user has.","slug":"list_user_roles","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all administrative roles assigned to a user and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to list roles for"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/roles","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.roles.read"]},{"name":"List Group Roles","description":"List all administrative roles assigned to a specific group. Members of the group inherit these administrative permissions. Use this to audit group-based administrative access.","slug":"list_group_roles","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all administrative roles assigned to a group and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID to list roles for"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/roles","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.roles.read"]},{"name":"Assign Role to User","description":"Assign an administrative role to a user. This grants the user administrative permissions based on the role type. Available roles include SUPER_ADMIN, ORG_ADMIN, APP_ADMIN, USER_ADMIN, MOBILE_ADMIN, READ_ONLY_ADMIN, HELP_DESK_ADMIN, and others. Use with caution as this grants elevated privileges.","slug":"assign_role_to_user","ai_risk":{"level":"medium","score":6,"reasoning":"This tool assigns administrative roles to users, granting elevated privileges, which is a high risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId","roleType"],"properties":{"userId":{"type":"string","description":"User ID or login email to assign role to"},"roleType":{"type":"string","description":"Type of admin role to assign","enum":["SUPER_ADMIN","ORG_ADMIN","APP_ADMIN","USER_ADMIN","MOBILE_ADMIN","READ_ONLY_ADMIN","HELP_DESK_ADMIN","GROUP_MEMBERSHIP_ADMIN","REPORT_ADMIN","API_ACCESS_MANAGEMENT_ADMIN"]}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/roles","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","body":"{\n \"type\": arguments.roleType\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.roles.manage"]},{"name":"List Policies","description":"List all policies in your Okta organization. Policies control authentication requirements, password rules, MFA enrollment, and other security settings. Filter by policy type to view specific categories. Use this to audit your security policies.","slug":"list_policies","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all policies in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["type"],"properties":{"type":{"type":"string","description":"Type of policy to list","enum":["OKTA_SIGN_ON","PASSWORD","MFA_ENROLL","OAUTH_AUTHORIZATION_POLICY","IDP_DISCOVERY","ACCESS_POLICY"]},"limit":{"type":"number","description":"Maximum number of policies to return (default: 200)","default":200}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/policies","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"type\": arguments.type,\n \"limit\": arguments.limit\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.policies.read"]},{"name":"Get Policy","description":"Get detailed information about a specific policy including its rules, conditions, and settings. Use this to review policy configuration and understand authentication or authorization requirements.","slug":"get_policy","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific policy and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["policyId"],"properties":{"policyId":{"type":"string","description":"Policy ID (e.g., '00p1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/policies/{policyId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"policyId\": arguments.policyId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.policies.read"]}]}}
1
+ {"id":"okta","status":"active","internal_status":"tool-works","applications":["okta"],"definition":{"display":{"name":"Okta","description":"Okta is an enterprise identity and access management platform that provides authentication, authorization, and user management.","icon":"okta.svg","website":"https://www.okta.com","category":"identity-security","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/okta"},"api":{"base_url":""},"configuration":{"type":"object","properties":{"oktaDomain":{"type":"string","title":"Okta Domain"}},"required":["oktaDomain"]},"auth":{"methods":{"apiKey":{"headerName":"Authorization","authorizationMapping":"\"SSWS \" & token"},"oauth":{"authUrlMapping":"oktaDomain & \"/oauth2/v1/authorize\"","tokenUrlMapping":"oktaDomain & \"/oauth2/v1/token\"","scopes":["offline_access","okta.users.read","okta.users.manage","okta.users.manage.self","okta.users.read.self","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage","okta.logs.read","okta.roles.read","okta.roles.manage","okta.policies.read","okta.policies.manage","okta.sessions.read","okta.sessions.manage","okta.authorizationServers.read","okta.authorizationServers.manage","okta.schemas.read","okta.schemas.manage","okta.idps.read","okta.idps.manage","okta.eventHooks.read","okta.eventHooks.manage","okta.inlineHooks.read","okta.inlineHooks.manage","okta.trustedOrigins.read","okta.trustedOrigins.manage","okta.networkZones.read","okta.networkZones.manage","okta.devices.read","okta.devices.manage","okta.authenticators.read","okta.authenticators.manage"],"defaultScopes":["offline_access","okta.users.read","okta.users.manage","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage","okta.logs.read","okta.roles.read","okta.roles.manage","okta.policies.read"],"scopeTemplates":[{"id":"read-only","name":"Read-only","description":"Read users, groups, applications and their assignments, admin roles, policies and system logs. Can't change the org.","scopes":["offline_access","okta.users.read","okta.groups.read","okta.apps.read","okta.logs.read","okta.roles.read","okta.policies.read"]},{"id":"user-lifecycle","name":"User lifecycle","description":"Create, update, activate and deactivate users, manage group membership and assign applications. Logs, roles and policies stay off.","scopes":["offline_access","okta.users.read","okta.users.manage","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage"]},{"id":"full-access","name":"Full access","description":"Every Okta API scope the connector supports. Grant all of them to the app under Okta API Scopes first, or sign-in fails.","scopes":["offline_access","okta.users.read","okta.users.manage","okta.users.manage.self","okta.users.read.self","okta.groups.read","okta.groups.manage","okta.apps.read","okta.apps.manage","okta.logs.read","okta.roles.read","okta.roles.manage","okta.policies.read","okta.policies.manage","okta.sessions.read","okta.sessions.manage","okta.authorizationServers.read","okta.authorizationServers.manage","okta.schemas.read","okta.schemas.manage","okta.idps.read","okta.idps.manage","okta.eventHooks.read","okta.eventHooks.manage","okta.inlineHooks.read","okta.inlineHooks.manage","okta.trustedOrigins.read","okta.trustedOrigins.manage","okta.networkZones.read","okta.networkZones.manage","okta.devices.read","okta.devices.manage","okta.authenticators.read","okta.authenticators.manage"]}],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"tools":[{"name":"List Users","description":"List all users in your Okta organization with optional filtering and pagination. Supports filtering by status (STAGED, PROVISIONED, ACTIVE, RECOVERY, LOCKED_OUT, PASSWORD_EXPIRED, SUSPENDED, DEPROVISIONED) and searching by name, email, or other profile attributes. Use this to discover users, audit accounts, or find specific users matching criteria.","slug":"list_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists users in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Search expression to filter users (e.g., 'profile.firstName eq \"John\"' or 'profile.email sw \"john\"')"},"filter":{"type":"string","description":"Filter expression for advanced queries (e.g., 'status eq \"ACTIVE\"' or 'lastUpdated gt \"2024-01-01T00:00:00.000Z\"')"},"limit":{"type":"number","description":"Maximum number of users to return (default: 200, max: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for fetching next page of results"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"search\": arguments.search,\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.users.read"]},{"name":"Get User","description":"Get detailed information about a specific user by their ID or login email. Returns user profile, status, credentials info, and lifecycle state. Use this to retrieve complete user details for a known user.","slug":"get_user","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific user and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID (e.g., '00u1234abcd') or login email (e.g., 'user@company.com')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.users.read"]},{"name":"Search Users","description":"Search for users using advanced filter expressions. Supports complex queries with operators like eq (equals), sw (starts with), pr (present), gt (greater than), lt (less than). Examples: 'status eq \"ACTIVE\" and profile.department eq \"Engineering\"' or 'profile.lastName sw \"Smith\"'. Use this for complex user discovery scenarios.","slug":"search_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool allows for complex queries to search users and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query string (simple text search across profile fields)"},"limit":{"type":"number","description":"Maximum number of users to return (default: 200, max: 200)","default":200}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.query,\n \"limit\": arguments.limit\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.users.read"]},{"name":"Create User","description":"Create a new user in your Okta organization. Requires at minimum an email address and can optionally include full profile details, password, and activation preferences. You can create users in different states: with activation email, without activation, or as a group admin. Use this to provision new user accounts.","slug":"create_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new users in the organization, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["profile"],"properties":{"profile":{"type":"object","description":"User profile attributes","required":["email","login"],"properties":{"firstName":{"type":"string","description":"User's first name"},"lastName":{"type":"string","description":"User's last name"},"email":{"type":"string","description":"User's email address"},"login":{"type":"string","description":"User's login (usually same as email)"},"mobilePhone":{"type":"string","description":"User's mobile phone"},"secondEmail":{"type":"string","description":"User's secondary email"}}},"credentials":{"type":"object","description":"User credentials (optional)","properties":{"password":{"type":"object","properties":{"value":{"type":"string","description":"User's password"}}}}},"activate":{"type":"boolean","description":"Activate user immediately (default: true)","default":true}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"activate\": arguments.activate\n }","body":"{\n \"profile\": arguments.profile,\n \"credentials\": arguments.credentials\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.users.manage"]},{"name":"Update User","description":"Update an existing user's profile information. You can modify any profile attributes like name, email, phone, or custom attributes. This performs a partial update - only specified fields are updated. Use this to keep user information current.","slug":"update_user","ai_risk":{"level":"low","score":4,"reasoning":"This tool updates existing user profiles, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId","profile"],"properties":{"userId":{"type":"string","description":"User ID or login email to update"},"profile":{"type":"object","description":"Profile attributes to update","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"mobilePhone":{"type":"string"},"secondEmail":{"type":"string"}}}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","body":"{\n \"profile\": arguments.profile\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"Deactivate User","description":"Deactivate a user account. This changes the user's status to DEPROVISIONED and revokes all active sessions. The user will not be able to log in. User data is retained and the user can be reactivated later. Use this for offboarding or temporarily suspending access.","slug":"deactivate_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool deactivates user accounts, which is a destructive action but retains user data, thus it is medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to deactivate"},"sendEmail":{"type":"boolean","description":"Send deactivation email to user (default: false)","default":false}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/lifecycle/deactivate","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","query":"{\n \"sendEmail\": arguments.sendEmail\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"Activate User","description":"Activate a user account that is in STAGED or DEPROVISIONED status. This allows the user to authenticate and access applications. Optionally sends an activation email with a temporary token. Use this for onboarding new users or reactivating previously deactivated accounts.","slug":"activate_user","ai_risk":{"level":"medium","score":5,"reasoning":"This tool activates user accounts, which is a destructive action but allows reactivation, placing it at medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to activate"},"sendEmail":{"type":"boolean","description":"Send activation email to user (default: true)","default":true}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/lifecycle/activate","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","query":"{\n \"sendEmail\": arguments.sendEmail\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.users.manage"]},{"name":"List Groups","description":"List all groups in your Okta organization. Supports searching by name and pagination. Groups are used to organize users and assign them to applications collectively. Use this to discover groups, audit group structure, or find specific groups.","slug":"list_groups","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all groups in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search term to find groups by name"},"filter":{"type":"string","description":"Filter expression (e.g., 'type eq \"OKTA_GROUP\"' or 'lastMembershipUpdated gt \"2024-01-01T00:00:00.000Z\"')"},"limit":{"type":"number","description":"Maximum number of groups to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.q,\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.groups.read"]},{"name":"Get Group","description":"Get detailed information about a specific group including its name, description, type, and member count. Use this to retrieve complete group details for a known group ID.","slug":"get_group","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific group and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID (e.g., '00g1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.read"]},{"name":"List Group Members","description":"List all users who are members of a specific group. Returns user profiles for each member with pagination support. Use this to see who belongs to a group or audit group membership.","slug":"list_group_members","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all users in a specific group and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID to list members for"},"limit":{"type":"number","description":"Maximum number of members to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.read"]},{"name":"Create Group","description":"Create a new group in your Okta organization. Groups can be used to organize users and assign them to applications collectively. You can specify a name and optional description. Use this to set up new teams, departments, or access groups.","slug":"create_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates new groups in the organization, which is a standard write operation and carries medium risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Name of the group"},"description":{"type":"string","description":"Optional description of the group"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","body":"{\n \"profile\": {\n \"name\": arguments.name,\n \"description\": arguments.description\n }\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.groups.manage"]},{"name":"Add User to Group","description":"Add a user to a group. This grants the user any application assignments and permissions associated with the group. The operation is idempotent - adding a user who is already a member has no effect. Use this to grant group-based access to users.","slug":"add_user_to_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool adds a user to a group, granting access based on group permissions, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId","userId"],"properties":{"groupId":{"type":"string","description":"Group ID to add the user to"},"userId":{"type":"string","description":"User ID or login email to add"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users/{userId}","method":"PUT","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId,\n \"userId\": arguments.userId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.manage"]},{"name":"Remove User from Group","description":"Remove a user from a group. This revokes any group-based application assignments and permissions. The operation is idempotent - removing a user who is not a member has no effect. Use this to revoke group-based access from users.","slug":"remove_user_from_group","ai_risk":{"level":"medium","score":5,"reasoning":"This tool removes a user from a group, revoking access, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId","userId"],"properties":{"groupId":{"type":"string","description":"Group ID to remove the user from"},"userId":{"type":"string","description":"User ID or login email to remove"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/users/{userId}","method":"DELETE","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId,\n \"userId\": arguments.userId\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["okta.groups.manage"]},{"name":"List Applications","description":"List all applications in your Okta organization. Applications represent the services and apps your users can access. Supports filtering by user assignment and pagination. Use this to discover applications, audit app inventory, or find specific apps.","slug":"list_applications","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all applications in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filter expression (e.g., 'user.id eq \"00u1234abcd\"' to show apps assigned to a user)"},"limit":{"type":"number","description":"Maximum number of apps to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"filter\": arguments.filter,\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.apps.read"]},{"name":"Get Application","description":"Get detailed information about a specific application including its settings, sign-on mode, and configuration. Use this to retrieve complete application details for a known app ID.","slug":"get_application","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific application and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID (e.g., '0oa1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"List Application Users","description":"List all users assigned to a specific application. Returns user assignments with app-specific credentials and profile attributes. Use this to see who has access to an application or audit app assignments.","slug":"list_application_users","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all users assigned to a specific application and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID to list users for"},"limit":{"type":"number","description":"Maximum number of assignments to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/users","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"List Application Groups","description":"List all groups assigned to a specific application. Group assignments allow all group members to access the application. Use this to see which groups have access to an application or audit app assignments.","slug":"list_application_groups","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all groups assigned to a specific application and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId"],"properties":{"appId":{"type":"string","description":"Application ID to list groups for"},"limit":{"type":"number","description":"Maximum number of assignments to return (default: 200)","default":200},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/groups","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","query":"{\n \"limit\": arguments.limit,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.apps.read"]},{"name":"Assign User to Application","description":"Assign a user to an application, granting them access. You can optionally provide app-specific credentials or profile attributes. Use this to provision user access to applications.","slug":"assign_user_to_application","ai_risk":{"level":"medium","score":5,"reasoning":"This tool assigns a user to an application, granting access, which is a medium risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["appId","userId"],"properties":{"appId":{"type":"string","description":"Application ID to assign the user to"},"userId":{"type":"string","description":"User ID or login email to assign"},"credentials":{"type":"object","description":"App-specific credentials (optional)","properties":{"userName":{"type":"string"},"password":{"type":"object","properties":{"value":{"type":"string"}}}}}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/apps/{appId}/users","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"appId\": arguments.appId\n }","body":"{\n \"id\": arguments.userId,\n \"credentials\": arguments.credentials\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.apps.manage"]},{"name":"Get System Logs","description":"Query system logs for audit and troubleshooting. Logs include authentication events, user lifecycle changes, policy evaluations, and administrative actions. Supports filtering by time range, event type, actor, target, and more. Use this to investigate security incidents, audit activity, or monitor system events.","slug":"get_system_logs","ai_risk":{"level":"low","score":1,"reasoning":"This tool queries system logs for audit purposes and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"Start time in ISO 8601 format (e.g., \"2024-01-01T00:00:00Z\"). Filters events after this time."},"until":{"type":"string","description":"End time in ISO 8601 format (e.g., \"2024-01-31T23:59:59Z\"). Filters events before this time."},"filter":{"type":"string","description":"Filter expression (e.g., 'eventType eq \"user.session.start\"' or 'actor.alternateId eq \"user@company.com\"')"},"q":{"type":"string","description":"Simple search query across all log fields"},"limit":{"type":"number","description":"Maximum number of log events to return (default: 100, max: 1000)","default":100},"sortOrder":{"type":"string","description":"Sort order: ASCENDING or DESCENDING (default: ASCENDING)","enum":["ASCENDING","DESCENDING"],"default":"ASCENDING"},"after":{"type":"string","description":"Pagination cursor for next page"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/logs","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"since\": arguments.since,\n \"until\": arguments.until,\n \"filter\": arguments.filter,\n \"q\": arguments.q,\n \"limit\": arguments.limit,\n \"sortOrder\": arguments.sortOrder,\n \"after\": arguments.after\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"requiredScopes":["okta.logs.read"]},{"name":"Get Log Event","description":"Get details of a specific log event by its ID. Returns the complete event including actor, target, outcome, and debug context. Use this to investigate a specific event in detail.","slug":"get_log_event","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves details of a specific log event and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["eventId"],"properties":{"eventId":{"type":"string","description":"Log event ID"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/logs","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"q\": arguments.eventId,\n \"limit\": 1\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.logs.read"]},{"name":"List User Roles","description":"List all administrative roles assigned to a specific user. Roles grant administrative permissions like managing users, groups, or applications. Use this to audit what administrative access a user has.","slug":"list_user_roles","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all administrative roles assigned to a user and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"User ID or login email to list roles for"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/roles","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.roles.read"]},{"name":"List Group Roles","description":"List all administrative roles assigned to a specific group. Members of the group inherit these administrative permissions. Use this to audit group-based administrative access.","slug":"list_group_roles","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all administrative roles assigned to a group and is read-only, making it low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["groupId"],"properties":{"groupId":{"type":"string","description":"Group ID to list roles for"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/groups/{groupId}/roles","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"groupId\": arguments.groupId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.roles.read"]},{"name":"Assign Role to User","description":"Assign an administrative role to a user. This grants the user administrative permissions based on the role type. Available roles include SUPER_ADMIN, ORG_ADMIN, APP_ADMIN, USER_ADMIN, MOBILE_ADMIN, READ_ONLY_ADMIN, HELP_DESK_ADMIN, and others. Use with caution as this grants elevated privileges.","slug":"assign_role_to_user","ai_risk":{"level":"medium","score":6,"reasoning":"This tool assigns administrative roles to users, granting elevated privileges, which is a high risk operation.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["userId","roleType"],"properties":{"userId":{"type":"string","description":"User ID or login email to assign role to"},"roleType":{"type":"string","description":"Type of admin role to assign","enum":["SUPER_ADMIN","ORG_ADMIN","APP_ADMIN","USER_ADMIN","MOBILE_ADMIN","READ_ONLY_ADMIN","HELP_DESK_ADMIN","GROUP_MEMBERSHIP_ADMIN","REPORT_ADMIN","API_ACCESS_MANAGEMENT_ADMIN"]}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/users/{userId}/roles","method":"POST","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"userId\": arguments.userId\n }","body":"{\n \"type\": arguments.roleType\n }"}},"annotations":{"destructiveHint":true,"idempotentHint":false},"requiredScopes":["okta.roles.manage"]},{"name":"List Policies","description":"List all policies in your Okta organization. Policies control authentication requirements, password rules, MFA enrollment, and other security settings. Filter by policy type to view specific categories. Use this to audit your security policies.","slug":"list_policies","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all policies in the organization and is read-only, posing minimal risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["type"],"properties":{"type":{"type":"string","description":"Type of policy to list","enum":["OKTA_SIGN_ON","PASSWORD","MFA_ENROLL","OAUTH_AUTHORIZATION_POLICY","IDP_DISCOVERY","ACCESS_POLICY"]},"limit":{"type":"number","description":"Maximum number of policies to return (default: 200)","default":200}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/policies","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain\n }","query":"{\n \"type\": arguments.type,\n \"limit\": arguments.limit\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.policies.read"]},{"name":"Get Policy","description":"Get detailed information about a specific policy including its rules, conditions, and settings. Use this to review policy configuration and understand authentication or authorization requirements.","slug":"get_policy","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves detailed information about a specific policy and is read-only, thus it is low risk.","calculated_at":"2026-05-22T20:33:32.053Z"},"enabled":true,"inputSchema":{"type":"object","required":["policyId"],"properties":{"policyId":{"type":"string","description":"Policy ID (e.g., '00p1234abcd')"}},"additionalProperties":false},"action":{"path":"{oktaDomain}/api/v1/policies/{policyId}","method":"GET","mapping":{"params":"{\n \"oktaDomain\": settings.oktaDomain,\n \"policyId\": arguments.policyId\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true},"requiredScopes":["okta.policies.read"]}]}}
@@ -1 +1 @@
1
- {"id":"onedrive","status":"active","internal_status":"tool-works","applications":["onedrive"],"definition":{"display":{"name":"Microsoft OneDrive","description":"Access and manage files and folders in Microsoft OneDrive using the Microsoft Graph API. Upload, download, search, share, and organize files in the user's personal cloud storage.","icon":"onedrive.svg","website":"https://onedrive.live.com/","category":"file-storage-document-management","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/onedrive"},"api":{"base_url":"https://graph.microsoft.com/v1.0"},"auth":{"methods":{"oauth":{"authUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","authInitUrlParams":{"response_mode":"query"},"scopes":["offline_access","User.Read","Files.Read","Files.Read.All","Files.ReadWrite","Files.ReadWrite.All"],"defaultScopes":["offline_access","Files.ReadWrite.All"],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"tools":[{"name":"List Root Items","description":"List files and folders in the root of the user's OneDrive. Returns item metadata including name, size, type, creation/modification dates, and web URLs. Use this as a starting point to browse the user's OneDrive contents.","slug":"list-root-items","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files and folders in the root of the user's OneDrive, providing metadata without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of items to return (1-200). Defaults to 50.","default":50},"orderby":{"type":"string","description":"OData orderby expression (e.g., 'name asc', 'lastModifiedDateTime desc'). Defaults to 'name asc'."},"select":{"type":"string","description":"Comma-separated fields to return (e.g., 'name,size,lastModifiedDateTime,webUrl')."}},"additionalProperties":false},"action":{"path":"/me/drive/root/children","method":"GET","mapping":{"query":"$sift({\n \"$top\": $exists(arguments.top) ? arguments.top : 50,\n \"$orderby\": arguments.orderby,\n \"$select\": arguments.select\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"List Folder Contents","description":"List files and folders inside a specific folder by folder ID or path. Returns the same metadata as List Root Items but for a specific subfolder.","slug":"list-folder-contents","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata for files and folders within a specific folder, operating in a read-only manner.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"folder_path":{"type":"string","description":"The path to the folder relative to the root (e.g., '/Documents/Projects'). Use either folder_path or folder_id."},"folder_id":{"type":"string","description":"The unique identifier of the folder. Use either folder_path or folder_id."},"top":{"type":"number","description":"Number of items to return (1-200). Defaults to 50.","default":50},"orderby":{"type":"string","description":"OData orderby expression."}},"additionalProperties":false},"action":{"path":"/me/drive{itemPath}/children","method":"GET","mapping":{"params":"{\n \"itemPath\": $exists(arguments.folder_id) ? \"/items/\" & arguments.folder_id : \"/root:\" & arguments.folder_path & \":\"\n }","query":"$sift({\n \"$top\": $exists(arguments.top) ? arguments.top : 50,\n \"$orderby\": arguments.orderby\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Item Metadata","description":"Get detailed metadata for a specific file or folder, including name, size, MIME type, creation/modification dates, download URL, sharing info, and parent reference. Use by item ID or path.","slug":"get-item-metadata","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches detailed metadata for a specific file or folder without making any changes to the data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_path":{"type":"string","description":"Path to the item relative to the root (e.g., '/Documents/report.pdf'). Use either item_path or item_id."},"item_id":{"type":"string","description":"The unique identifier of the item. Use either item_path or item_id."},"select":{"type":"string","description":"Comma-separated fields to return."}},"additionalProperties":false},"action":{"path":"/me/drive{itemPath}","method":"GET","mapping":{"params":"{\n \"itemPath\": $exists(arguments.item_id) ? \"/items/\" & arguments.item_id : \"/root:\" & arguments.item_path & \":\"\n }","query":"$sift({\n \"$select\": arguments.select\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Files","description":"Search for files and folders across the entire OneDrive by name or content. Returns matching items with their metadata and path information.","slug":"search-files","ai_risk":{"level":"low","score":1,"reasoning":"This tool allows users to search for files and folders by name or content, returning metadata without altering any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query. Matches against file names and content (e.g., 'quarterly report', 'budget.xlsx')."},"top":{"type":"number","description":"Number of results to return (1-100). Defaults to 25.","default":25}},"required":["query"],"additionalProperties":false},"action":{"path":"/me/drive/root/search(q='{query}')","method":"GET","mapping":{"params":"{\n \"query\": arguments.query\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"List Recent Files","description":"List files that the user has recently accessed or modified. This provides quick access to recently worked-on files across OneDrive.","slug":"list-recent-files","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files that the user has recently accessed or modified, providing read-only access to metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of recent items to return. Defaults to 25.","default":25}},"additionalProperties":false},"action":{"path":"/me/drive/recent","method":"GET","mapping":{"query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Upload File","description":"Upload a new file to OneDrive. Provide the file content as base64-encoded data. For files under 4MB only. Specify the destination path including the filename. If a file with the same name exists, it will be replaced.","slug":"upload-file","ai_risk":{"level":"medium","score":5,"reasoning":"This tool uploads a new file to OneDrive, which involves creating new data but can overwrite existing files.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"file_path":{"type":"string","description":"The destination path including filename (e.g., '/Documents/report.pdf')."},"content":{"type":"string","description":"The file content as a base64-encoded string. For files under 4MB."}},"required":["file_path","content"],"additionalProperties":false},"action":{"path":"/me/drive/root:{file_path}:/content","method":"PUT","mapping":{"params":"{\n \"file_path\": arguments.file_path\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Update File Content","description":"Replace the content of an existing file by its ID. The new content should be base64-encoded. File metadata (name, location) is preserved.","slug":"update-file-content","ai_risk":{"level":"medium","score":5,"reasoning":"This tool replaces the content of an existing file, which is a standard write operation that modifies existing data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file to update."},"content":{"type":"string","description":"The new file content as a base64-encoded string."}},"required":["item_id","content"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/content","method":"PUT","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Create Folder","description":"Create a new folder in OneDrive. You can create folders at the root or inside an existing folder. If a folder with the same name exists, the behavior is controlled by the conflict_behavior parameter.","slug":"create-folder","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new folder in OneDrive, which is a standard write operation that modifies the user's file structure.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"folder_name":{"type":"string","description":"The name of the new folder."},"parent_path":{"type":"string","description":"The path to the parent folder (e.g., '/Documents'). If omitted, creates at the root."},"parent_id":{"type":"string","description":"The ID of the parent folder. Alternative to parent_path."},"conflict_behavior":{"type":"string","description":"Behavior if a folder with the same name exists.","enum":["rename","replace","fail"],"default":"rename"}},"required":["folder_name"],"additionalProperties":false},"action":{"path":"/me/drive{parentPath}/children","method":"POST","mapping":{"params":"{\n \"parentPath\": $exists(arguments.parent_id) ? \"/items/\" & arguments.parent_id : ($exists(arguments.parent_path) ? \"/root:\" & arguments.parent_path & \":\" : \"/root\")\n }","body":"{\n \"name\": arguments.folder_name,\n \"folder\": {},\n \"@microsoft.graph.conflictBehavior\": $exists(arguments.conflict_behavior) ? arguments.conflict_behavior : \"rename\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Copy Item","description":"Copy a file or folder to a new location in OneDrive. The copy operation runs asynchronously for large files. You can optionally rename the copy.","slug":"copy-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool copies a file or folder to a new location, which is a write operation that modifies the user's file organization.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to copy."},"destination_folder_id":{"type":"string","description":"The ID of the destination folder."},"new_name":{"type":"string","description":"Optional new name for the copy. If omitted, keeps the original name."}},"required":["item_id","destination_folder_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/copy","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"parentReference\": {\n \"id\": arguments.destination_folder_id\n },\n \"name\": arguments.new_name\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Move or Rename Item","description":"Move a file or folder to a different location, rename it, or both. To rename without moving, provide only the new_name. To move without renaming, provide only the destination_folder_id.","slug":"move-rename-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool moves or renames a file or folder, which is a write operation that alters the user's file structure.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to move or rename."},"destination_folder_id":{"type":"string","description":"The ID of the destination folder (for moving)."},"new_name":{"type":"string","description":"The new name for the item (for renaming)."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"PATCH","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"parentReference\": $exists(arguments.destination_folder_id) ? {\"id\": arguments.destination_folder_id} : null,\n \"name\": arguments.new_name\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Delete Item","description":"Delete a file or folder from OneDrive. Deleted items are moved to the recycle bin and can be restored within the retention period. Deleting a folder also deletes all its contents.","slug":"delete-item","ai_risk":{"level":"medium","score":6,"reasoning":"This tool deletes a file or folder, which can cause significant data loss, although items can be restored from the recycle bin.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to delete."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"DELETE","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"List File Versions","description":"List all versions of a file. OneDrive automatically creates versions when files are modified. Each version includes metadata about who changed it and when.","slug":"list-file-versions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all versions of a file, providing read-only access to version metadata without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/versions","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Restore File Version","description":"Restore a previous version of a file, making it the current version. The current version becomes a historical version.","slug":"restore-file-version","ai_risk":{"level":"medium","score":6,"reasoning":"This tool restores a previous version of a file, which modifies the current state of the file and can lead to data loss.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."},"version_id":{"type":"string","description":"The version ID to restore."}},"required":["item_id","version_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/versions/{version_id}/restoreVersion","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id,\n \"version_id\": arguments.version_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Create Sharing Link","description":"Create a sharing link for a file or folder. The link grants access to anyone who has it (based on the scope and type settings). Returns a URL that can be shared with others.","slug":"create-sharing-link","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a sharing link for a file or folder, which modifies access permissions but does not alter the data itself.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to share."},"type":{"type":"string","description":"The type of sharing link.","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","description":"The scope of the sharing link.","enum":["anonymous","organization","users"],"default":"organization"},"expiration":{"type":"string","description":"Optional link expiration in ISO 8601 format (e.g., '2024-12-31T23:59:59Z')."},"password":{"type":"string","description":"Optional password to protect the sharing link."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/createLink","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"type\": $exists(arguments.type) ? arguments.type : \"view\",\n \"scope\": $exists(arguments.scope) ? arguments.scope : \"organization\",\n \"expirationDateTime\": arguments.expiration,\n \"password\": arguments.password\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Share with Users","description":"Share a file or folder with specific users by sending them an invitation with a link. You can specify permissions (read or write) and include a personal message.","slug":"share-with-users","ai_risk":{"level":"medium","score":5,"reasoning":"This tool shares a file or folder with specific users, modifying access permissions without changing the data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to share."},"recipients":{"type":"array","description":"List of email addresses to share with.","items":{"type":"string"}},"roles":{"type":"array","description":"Permissions to grant: ['read'] for view-only, ['write'] for edit access.","items":{"type":"string","enum":["read","write"]},"default":["read"]},"message":{"type":"string","description":"Optional personal message to include in the sharing notification."},"send_invitation":{"type":"boolean","description":"Whether to send an email notification. Defaults to true.","default":true}},"required":["item_id","recipients"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/invite","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"recipients\": $map(arguments.recipients, function($email) {\n {\"email\": $email}\n })[],\n \"roles\": $exists(arguments.roles) ? arguments.roles : [\"read\"],\n \"sendInvitation\": $exists(arguments.send_invitation) ? arguments.send_invitation : true,\n \"message\": arguments.message,\n \"requireSignIn\": true\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"List Permissions","description":"List all permissions on a file or folder, including sharing links and direct access grants. Shows who has access and what level of permission they have.","slug":"list-permissions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all permissions on a file or folder, providing read-only access to permission metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/permissions","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Remove Permission","description":"Remove a specific permission from a file or folder. This revokes access for the user or invalidates the sharing link. Get the permission ID from the List Permissions tool.","slug":"remove-permission","ai_risk":{"level":"medium","score":5,"reasoning":"This tool removes a specific permission from a file or folder, modifying access rights but not the data itself.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item."},"permission_id":{"type":"string","description":"The unique identifier of the permission to remove."}},"required":["item_id","permission_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/permissions/{permission_id}","method":"DELETE","mapping":{"params":"{\n \"item_id\": arguments.item_id,\n \"permission_id\": arguments.permission_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Get Drive Info","description":"Get information about the user's OneDrive, including total storage space, used space, remaining space, and drive type.","slug":"get-drive-info","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the user's OneDrive storage, providing read-only access to metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/me/drive","method":"GET","mapping":{}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Shared With Me","description":"List files and folders that other people have shared with the authenticated user. Returns items from other users' OneDrives that have been shared via permissions or sharing links.","slug":"list-shared-with-me","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files and folders shared with the user, providing read-only access to shared items.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of items to return. Defaults to 25.","default":25}},"additionalProperties":false},"action":{"path":"/me/drive/sharedWithMe","method":"GET","mapping":{"query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get File Download URL","description":"Get a pre-authenticated, short-lived download URL for a file. The URL can be used to download the file content directly. The URL is valid for a short period (typically a few minutes).","slug":"get-file-download-url","ai_risk":{"level":"low","score":1,"reasoning":"This tool generates a temporary download URL for a file, providing access without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","query":"{\n \"$select\": \"@microsoft.graph.downloadUrl,name,size\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}
1
+ {"id":"onedrive","status":"active","internal_status":"tool-works","applications":["onedrive"],"definition":{"display":{"name":"Microsoft OneDrive","description":"Access and manage files and folders in Microsoft OneDrive using the Microsoft Graph API. Upload, download, search, share, and organize files in the user's personal cloud storage.","icon":"onedrive.svg","website":"https://onedrive.live.com/","category":"file-storage-document-management","docs_url":"https://docs.withwillow.ai/docs/mcp-servers/built-in/onedrive"},"api":{"base_url":"https://graph.microsoft.com/v1.0"},"auth":{"methods":{"oauth":{"authUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/authorize","tokenUrl":"https://login.microsoftonline.com/common/oauth2/v2.0/token","authInitUrlParams":{"response_mode":"query"},"scopes":["offline_access","User.Read","Files.Read","Files.Read.All","Files.ReadWrite","Files.ReadWrite.All"],"defaultScopes":["offline_access","Files.ReadWrite.All"],"scopeTemplates":[{"id":"read-only","name":"Read-only","description":"Browse, search and download the user's files and files shared with them. Can't upload, move, delete or share.","scopes":["offline_access","Files.Read.All"]},{"id":"own-files","name":"Own files only","description":"Read and write only the user's own OneDrive. Files shared with them, and sharing with specific people, stay off.","scopes":["offline_access","Files.ReadWrite"]},{"id":"full-access","name":"Full access","description":"Read, upload, move, delete and share every file the user can access, including files shared with them.","scopes":["offline_access","User.Read","Files.ReadWrite.All"]}],"pkce":true,"codeExchangeConfig":{"modelCredentialsMapping":"{\n \"access_token\": access_token,\n \"expires_at\": $fromMillis($millis() + expires_in * 1000),\n \"refresh_token\": refresh_token,\n \"scope\": scope,\n \"token_type\": token_type\n}","isForm":true}}}},"tools":[{"name":"List Root Items","description":"List files and folders in the root of the user's OneDrive. Returns item metadata including name, size, type, creation/modification dates, and web URLs. Use this as a starting point to browse the user's OneDrive contents.","slug":"list-root-items","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files and folders in the root of the user's OneDrive, providing metadata without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of items to return (1-200). Defaults to 50.","default":50},"orderby":{"type":"string","description":"OData orderby expression (e.g., 'name asc', 'lastModifiedDateTime desc'). Defaults to 'name asc'."},"select":{"type":"string","description":"Comma-separated fields to return (e.g., 'name,size,lastModifiedDateTime,webUrl')."}},"additionalProperties":false},"action":{"path":"/me/drive/root/children","method":"GET","mapping":{"query":"$sift({\n \"$top\": $exists(arguments.top) ? arguments.top : 50,\n \"$orderby\": arguments.orderby,\n \"$select\": arguments.select\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"List Folder Contents","description":"List files and folders inside a specific folder by folder ID or path. Returns the same metadata as List Root Items but for a specific subfolder.","slug":"list-folder-contents","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves metadata for files and folders within a specific folder, operating in a read-only manner.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"folder_path":{"type":"string","description":"The path to the folder relative to the root (e.g., '/Documents/Projects'). Use either folder_path or folder_id."},"folder_id":{"type":"string","description":"The unique identifier of the folder. Use either folder_path or folder_id."},"top":{"type":"number","description":"Number of items to return (1-200). Defaults to 50.","default":50},"orderby":{"type":"string","description":"OData orderby expression."}},"additionalProperties":false},"action":{"path":"/me/drive{itemPath}/children","method":"GET","mapping":{"params":"{\n \"itemPath\": $exists(arguments.folder_id) ? \"/items/\" & arguments.folder_id : \"/root:\" & arguments.folder_path & \":\"\n }","query":"$sift({\n \"$top\": $exists(arguments.top) ? arguments.top : 50,\n \"$orderby\": arguments.orderby\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Get Item Metadata","description":"Get detailed metadata for a specific file or folder, including name, size, MIME type, creation/modification dates, download URL, sharing info, and parent reference. Use by item ID or path.","slug":"get-item-metadata","ai_risk":{"level":"low","score":1,"reasoning":"This tool fetches detailed metadata for a specific file or folder without making any changes to the data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_path":{"type":"string","description":"Path to the item relative to the root (e.g., '/Documents/report.pdf'). Use either item_path or item_id."},"item_id":{"type":"string","description":"The unique identifier of the item. Use either item_path or item_id."},"select":{"type":"string","description":"Comma-separated fields to return."}},"additionalProperties":false},"action":{"path":"/me/drive{itemPath}","method":"GET","mapping":{"params":"{\n \"itemPath\": $exists(arguments.item_id) ? \"/items/\" & arguments.item_id : \"/root:\" & arguments.item_path & \":\"\n }","query":"$sift({\n \"$select\": arguments.select\n }, function($v) { $v != null })"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Search Files","description":"Search for files and folders across the entire OneDrive by name or content. Returns matching items with their metadata and path information.","slug":"search-files","ai_risk":{"level":"low","score":1,"reasoning":"This tool allows users to search for files and folders by name or content, returning metadata without altering any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query. Matches against file names and content (e.g., 'quarterly report', 'budget.xlsx')."},"top":{"type":"number","description":"Number of results to return (1-100). Defaults to 25.","default":25}},"required":["query"],"additionalProperties":false},"action":{"path":"/me/drive/root/search(q='{query}')","method":"GET","mapping":{"params":"{\n \"query\": arguments.query\n }","query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"List Recent Files","description":"List files that the user has recently accessed or modified. This provides quick access to recently worked-on files across OneDrive.","slug":"list-recent-files","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files that the user has recently accessed or modified, providing read-only access to metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of recent items to return. Defaults to 25.","default":25}},"additionalProperties":false},"action":{"path":"/me/drive/recent","method":"GET","mapping":{"query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Upload File","description":"Upload a new file to OneDrive. Provide the file content as base64-encoded data. For files under 4MB only. Specify the destination path including the filename. If a file with the same name exists, it will be replaced.","slug":"upload-file","ai_risk":{"level":"medium","score":5,"reasoning":"This tool uploads a new file to OneDrive, which involves creating new data but can overwrite existing files.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"file_path":{"type":"string","description":"The destination path including filename (e.g., '/Documents/report.pdf')."},"content":{"type":"string","description":"The file content as a base64-encoded string. For files under 4MB."}},"required":["file_path","content"],"additionalProperties":false},"action":{"path":"/me/drive/root:{file_path}:/content","method":"PUT","mapping":{"params":"{\n \"file_path\": arguments.file_path\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Update File Content","description":"Replace the content of an existing file by its ID. The new content should be base64-encoded. File metadata (name, location) is preserved.","slug":"update-file-content","ai_risk":{"level":"medium","score":5,"reasoning":"This tool replaces the content of an existing file, which is a standard write operation that modifies existing data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file to update."},"content":{"type":"string","description":"The new file content as a base64-encoded string."}},"required":["item_id","content"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/content","method":"PUT","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"arguments.content"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Create Folder","description":"Create a new folder in OneDrive. You can create folders at the root or inside an existing folder. If a folder with the same name exists, the behavior is controlled by the conflict_behavior parameter.","slug":"create-folder","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a new folder in OneDrive, which is a standard write operation that modifies the user's file structure.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"folder_name":{"type":"string","description":"The name of the new folder."},"parent_path":{"type":"string","description":"The path to the parent folder (e.g., '/Documents'). If omitted, creates at the root."},"parent_id":{"type":"string","description":"The ID of the parent folder. Alternative to parent_path."},"conflict_behavior":{"type":"string","description":"Behavior if a folder with the same name exists.","enum":["rename","replace","fail"],"default":"rename"}},"required":["folder_name"],"additionalProperties":false},"action":{"path":"/me/drive{parentPath}/children","method":"POST","mapping":{"params":"{\n \"parentPath\": $exists(arguments.parent_id) ? \"/items/\" & arguments.parent_id : ($exists(arguments.parent_path) ? \"/root:\" & arguments.parent_path & \":\" : \"/root\")\n }","body":"{\n \"name\": arguments.folder_name,\n \"folder\": {},\n \"@microsoft.graph.conflictBehavior\": $exists(arguments.conflict_behavior) ? arguments.conflict_behavior : \"rename\"\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Copy Item","description":"Copy a file or folder to a new location in OneDrive. The copy operation runs asynchronously for large files. You can optionally rename the copy.","slug":"copy-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool copies a file or folder to a new location, which is a write operation that modifies the user's file organization.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to copy."},"destination_folder_id":{"type":"string","description":"The ID of the destination folder."},"new_name":{"type":"string","description":"Optional new name for the copy. If omitted, keeps the original name."}},"required":["item_id","destination_folder_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/copy","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"parentReference\": {\n \"id\": arguments.destination_folder_id\n },\n \"name\": arguments.new_name\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Move or Rename Item","description":"Move a file or folder to a different location, rename it, or both. To rename without moving, provide only the new_name. To move without renaming, provide only the destination_folder_id.","slug":"move-rename-item","ai_risk":{"level":"medium","score":5,"reasoning":"This tool moves or renames a file or folder, which is a write operation that alters the user's file structure.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to move or rename."},"destination_folder_id":{"type":"string","description":"The ID of the destination folder (for moving)."},"new_name":{"type":"string","description":"The new name for the item (for renaming)."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"PATCH","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"parentReference\": $exists(arguments.destination_folder_id) ? {\"id\": arguments.destination_folder_id} : null,\n \"name\": arguments.new_name\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true,"idempotentHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Delete Item","description":"Delete a file or folder from OneDrive. Deleted items are moved to the recycle bin and can be restored within the retention period. Deleting a folder also deletes all its contents.","slug":"delete-item","ai_risk":{"level":"medium","score":6,"reasoning":"This tool deletes a file or folder, which can cause significant data loss, although items can be restored from the recycle bin.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to delete."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"DELETE","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"List File Versions","description":"List all versions of a file. OneDrive automatically creates versions when files are modified. Each version includes metadata about who changed it and when.","slug":"list-file-versions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all versions of a file, providing read-only access to version metadata without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/versions","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Restore File Version","description":"Restore a previous version of a file, making it the current version. The current version becomes a historical version.","slug":"restore-file-version","ai_risk":{"level":"medium","score":6,"reasoning":"This tool restores a previous version of a file, which modifies the current state of the file and can lead to data loss.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."},"version_id":{"type":"string","description":"The version ID to restore."}},"required":["item_id","version_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/versions/{version_id}/restoreVersion","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id,\n \"version_id\": arguments.version_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Create Sharing Link","description":"Create a sharing link for a file or folder. The link grants access to anyone who has it (based on the scope and type settings). Returns a URL that can be shared with others.","slug":"create-sharing-link","ai_risk":{"level":"medium","score":5,"reasoning":"This tool creates a sharing link for a file or folder, which modifies access permissions but does not alter the data itself.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to share."},"type":{"type":"string","description":"The type of sharing link.","enum":["view","edit","embed"],"default":"view"},"scope":{"type":"string","description":"The scope of the sharing link.","enum":["anonymous","organization","users"],"default":"organization"},"expiration":{"type":"string","description":"Optional link expiration in ISO 8601 format (e.g., '2024-12-31T23:59:59Z')."},"password":{"type":"string","description":"Optional password to protect the sharing link."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/createLink","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"type\": $exists(arguments.type) ? arguments.type : \"view\",\n \"scope\": $exists(arguments.scope) ? arguments.scope : \"organization\",\n \"expirationDateTime\": arguments.expiration,\n \"password\": arguments.password\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite"]},{"name":"Share with Users","description":"Share a file or folder with specific users by sending them an invitation with a link. You can specify permissions (read or write) and include a personal message.","slug":"share-with-users","ai_risk":{"level":"medium","score":5,"reasoning":"This tool shares a file or folder with specific users, modifying access permissions without changing the data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item to share."},"recipients":{"type":"array","description":"List of email addresses to share with.","items":{"type":"string"}},"roles":{"type":"array","description":"Permissions to grant: ['read'] for view-only, ['write'] for edit access.","items":{"type":"string","enum":["read","write"]},"default":["read"]},"message":{"type":"string","description":"Optional personal message to include in the sharing notification."},"send_invitation":{"type":"boolean","description":"Whether to send an email notification. Defaults to true.","default":true}},"required":["item_id","recipients"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/invite","method":"POST","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","body":"$sift({\n \"recipients\": $map(arguments.recipients, function($email) {\n {\"email\": $email}\n })[],\n \"roles\": $exists(arguments.roles) ? arguments.roles : [\"read\"],\n \"sendInvitation\": $exists(arguments.send_invitation) ? arguments.send_invitation : true,\n \"message\": arguments.message,\n \"requireSignIn\": true\n }, function($v) { $v != null })"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"List Permissions","description":"List all permissions on a file or folder, including sharing links and direct access grants. Shows who has access and what level of permission they have.","slug":"list-permissions","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists all permissions on a file or folder, providing read-only access to permission metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/permissions","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"Remove Permission","description":"Remove a specific permission from a file or folder. This revokes access for the user or invalidates the sharing link. Get the permission ID from the List Permissions tool.","slug":"remove-permission","ai_risk":{"level":"medium","score":5,"reasoning":"This tool removes a specific permission from a file or folder, modifying access rights but not the data itself.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the item."},"permission_id":{"type":"string","description":"The unique identifier of the permission to remove."}},"required":["item_id","permission_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}/permissions/{permission_id}","method":"DELETE","mapping":{"params":"{\n \"item_id\": arguments.item_id,\n \"permission_id\": arguments.permission_id\n }"}},"annotations":{"destructiveHint":true},"requiredScopes":["Files.ReadWrite.All"]},{"name":"Get Drive Info","description":"Get information about the user's OneDrive, including total storage space, used space, remaining space, and drive type.","slug":"get-drive-info","ai_risk":{"level":"low","score":1,"reasoning":"This tool retrieves information about the user's OneDrive storage, providing read-only access to metadata.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"action":{"path":"/me/drive","method":"GET","mapping":{}},"annotations":{"readOnlyHint":true,"idempotentHint":true}},{"name":"List Shared With Me","description":"List files and folders that other people have shared with the authenticated user. Returns items from other users' OneDrives that have been shared via permissions or sharing links.","slug":"list-shared-with-me","ai_risk":{"level":"low","score":1,"reasoning":"This tool lists files and folders shared with the user, providing read-only access to shared items.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"top":{"type":"number","description":"Number of items to return. Defaults to 25.","default":25}},"additionalProperties":false},"action":{"path":"/me/drive/sharedWithMe","method":"GET","mapping":{"query":"{\n \"$top\": $exists(arguments.top) ? arguments.top : 25\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"Get File Download URL","description":"Get a pre-authenticated, short-lived download URL for a file. The URL can be used to download the file content directly. The URL is valid for a short period (typically a few minutes).","slug":"get-file-download-url","ai_risk":{"level":"low","score":1,"reasoning":"This tool generates a temporary download URL for a file, providing access without modifying any data.","calculated_at":"2026-05-22T20:33:53.709Z"},"enabled":true,"inputSchema":{"type":"object","properties":{"item_id":{"type":"string","description":"The unique identifier of the file."}},"required":["item_id"],"additionalProperties":false},"action":{"path":"/me/drive/items/{item_id}","method":"GET","mapping":{"params":"{\n \"item_id\": arguments.item_id\n }","query":"{\n \"$select\": \"@microsoft.graph.downloadUrl,name,size\"\n }"}},"annotations":{"readOnlyHint":true,"idempotentHint":true}}]}}