id: microsoft_defender_o365 name: Microsoft Defender for Office 365 version: 1.0.0 description: "Microsoft Defender for Office 365 email remediation (Microsoft Graph mail APIs) — anti-phishing containment: search a mailbox for messages, read a message and its attachments, move a message to a folder, and hard-delete (purge) a phishing message. Azure AD OAuth2 client-credentials authentication; stdlib-only, no extra Python dependencies." changelog: "1.0.0 — Initial release: search mailbox messages, get message, list attachments, list folders, move message, delete (purge) message." category: email # Per-instance configuration. Uses application (client-credentials) OAuth2. # The app registration needs Graph application permission Mail.ReadWrite. config_schema: properties: tenant_id: type: string description: "Azure AD tenant ID" client_id: type: string description: "App registration (client) ID" client_secret: type: string description: "App registration client secret" x-soar-sensitive: true required: - tenant_id - client_id - client_secret commands: - id: search_messages name: mdo-search-messages description: "Search a mailbox for messages by sender, subject, or free-text search." risk: read inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (user principal name or ID)" } subject: { type: string, description: "Filter by exact subject" } from_address: { type: string, description: "Filter by sender address" } search: { type: string, description: "Free-text $search query (KQL) over the mailbox" } limit: { type: number, description: "Max messages (default 25)" } required: [mailbox] outputs_schema: { properties: {} } - id: get_message name: mdo-get-message description: "Get a single message by ID." risk: read inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (UPN or ID)" } message_id: { type: string, description: "Message ID" } required: [mailbox, message_id] outputs_schema: { properties: {} } - id: list_attachments name: mdo-list-attachments description: "List a message's attachments." risk: read inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (UPN or ID)" } message_id: { type: string, description: "Message ID" } required: [mailbox, message_id] outputs_schema: { properties: {} } - id: list_folders name: mdo-list-folders description: "List the mail folders of a mailbox (to obtain destination IDs for move)." risk: read inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (UPN or ID)" } required: [mailbox] outputs_schema: { properties: {} } - id: move_message name: mdo-move-message description: "Move a message to another folder (e.g. to Junk Email or a quarantine folder)." inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (UPN or ID)" } message_id: { type: string, description: "Message ID" } destination_id: { type: string, description: "Destination folder ID or well-known name (e.g. junkemail, deleteditems)" } required: [mailbox, message_id, destination_id] outputs_schema: { properties: {} } - id: delete_message name: mdo-delete-message description: "Hard-delete (purge) a message from the mailbox." inputs_schema: properties: mailbox: { type: string, description: "Target mailbox (UPN or ID)" } message_id: { type: string, description: "Message ID" } required: [mailbox, message_id] outputs_schema: { properties: {} } - id: test_connection name: mdo-test-connection description: "Verify connectivity and the app credentials (used by the Test button)." risk: read inputs_schema: properties: {} required: [] outputs_schema: { properties: {} }