Skip to main content
Glama

Inbox Rules

manage-rules
Destructive

List, create, update, reorder, or delete server-side Outlook inbox rules, with dry-run previews for create/update and optional rule details.

Instructions

Server-side inbox rules (destructive: covers delete; dryRun previews create/update). Rules run on the Exchange server whichever client is open. action=list (default) returns rules with id/name/sequence; includeDetails: true adds conditions/actions/exceptions. action=create builds a rule from condition params (12, e.g. fromAddresses, containsSubject, bodyContains, hasAttachments, importance, sensitivity), action params (9, e.g. moveToFolder/copyToFolder — folder name, nested path like Triage/Delete, or ID — forwardTo, redirectTo, assignCategories, markAsRead, delete) and optional except* exceptions. action=update patches fields by ruleId or ruleName. action=reorder changes priority via sequence (lower runs first). action=delete removes a rule. The recipient allowlist applies to forwardTo/redirectTo. There is no permanentDelete action. Changes count against the session limit (OUTLOOK_MAX_MANAGE_RULES_PER_SESSION, else OUTLOOK_MAX_EMAILS_PER_SESSION); 0 refuses them.

Input Schema

NameRequiredDescriptionDefault
nameNoRule name (action=create required, action=update to rename)
actionNoAction to perform (default: list)
dryRunNoPreview only (action=create or update): shows the rule without creating or changing it. Other actions refuse dryRun and change nothing. Default false.
ruleIdNoID of existing rule (action=update/delete)
ruleNameNoName of existing rule (action=update/reorder/delete)
sentCcMeNoMatch emails where I am in CC (action=create/update)
sentToMeNoMatch emails sent to me (action=create/update)
sequenceNoExecution order, lower = higher priority (action=create default: auto, action=reorder required)
forwardToNoComma-separated emails to forward matching messages to (action=create/update)
isEnabledNoEnable/disable rule (action=create default: true, action=update)
importanceNoMatch emails with this importance (action=create/update)
markAsReadNoMark matching emails as read (action=create/update)
redirectToNoComma-separated emails to redirect matching messages to (action=create/update)
displayNameNoAlias for `name` (matches Graph's own `displayName` field).
sensitivityNoMatch emails with this sensitivity (action=create/update)
bodyContainsNoComma-separated body text keywords (OR logic) (action=create/update)
copyToFolderNoFolder to copy matching emails to: a name, a nested path like `Projects/Backup`, a well-known name, or a folder ID (action=create/update)
moveToFolderNoFolder to move matching emails to: a name, a nested path like `Triage/Delete`, a well-known name (e.g. `archive`), or a folder ID (action=create/update)
sentOnlyToMeNoMatch emails where I am the only recipient (action=create/update)
deleteMessageNoMove matching emails to Deleted Items (action=create/update)
fromAddressesNoComma-separated sender emails to match (action=create/update)
hasAttachmentsNoMatch emails with attachments (action=create/update)
includeDetailsNoInclude detailed conditions, actions, and exceptions (action=list)
markImportanceNoSet importance on matching emails (action=create/update)
senderContainsNoComma-separated partial sender matches (action=create/update)
containsSubjectNoComma-separated subject keywords (OR logic). e.g. "invoice, receipt, payment" (action=create/update)
sentToAddressesNoComma-separated recipient emails to match (action=create/update)
assignCategoriesNoComma-separated Outlook categories to assign (action=create/update)
isAutomaticReplyNoMatch automatic reply emails (action=create/update)
recipientContainsNoComma-separated partial recipient matches (action=create/update)
exceptBodyContainsNoComma-separated body keywords to exclude (action=create/update)
exceptFromAddressesNoComma-separated sender emails to exclude (action=create/update)
stopProcessingRulesNoStop evaluating subsequent rules (action=create/update)
exceptHasAttachmentsNoExclude emails with attachments (action=create/update)
exceptSenderContainsNoComma-separated partial sender matches to exclude (action=create/update)
bodyOrSubjectContainsNoComma-separated keywords matching body OR subject (OR logic) (action=create/update)
exceptSubjectContainsNoComma-separated subject keywords to exclude (action=create/update)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv3.14.1
    • changedInput schema / properties / copyToFolder / description
      Previous value: -"Folder name to copy matching emails to (action=create/update)"New value: +"Folder to copy matching emails to: a name, a nested path like `Projects/Backup`, a well-known name, or a folder ID (action=create/update)"
    • changedInput schema / properties / dryRun / description
      Previous value: -"Preview rule without creating/updating (action=create, action=update)"New value: +"Preview only (action=create or update): shows the rule without creating or changing it. Other actions refuse dryRun and change nothing. Default false."
    • changedInput schema / properties / moveToFolder / description
      Previous value: -"Folder name to move matching emails to (action=create/update)"New value: +"Folder to move matching emails to: a name, a nested path like `Triage/Delete`, a well-known name (e.g. `archive`), or a folder ID (action=create/update)"
  2. Changed38 schema fields changedv3.7.4
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "reorder",
      -  "delete"
      -]New value: +[
      +  "list",
      +  "create",
      +  "update",
      +  "reorder",
      +  "delete"
      +]
    • addedInput schema / properties / assignCategories
      Added value: +{
      +  "description": "Comma-separated Outlook categories to assign (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / bodyContains
      Added value: +{
      +  "description": "Comma-separated body text keywords (OR logic) (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / bodyOrSubjectContains
      Added value: +{
      +  "description": "Comma-separated keywords matching body OR subject (OR logic) (action=create/update)",
      +  "type": "string"
      +}
    • changedInput schema / properties / containsSubject / description
      Previous value: -"Subject text the email must contain (action=create)"New value: +"Comma-separated subject keywords (OR logic). e.g. \"invoice, receipt, payment\" (action=create/update)"
    • addedInput schema / properties / copyToFolder
      Added value: +{
      +  "description": "Folder name to copy matching emails to (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / deleteMessage
      Added value: +{
      +  "description": "Move matching emails to Deleted Items (action=create/update)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / displayName
      Added value: +{
      +  "description": "Alias for `name` (matches Graph's own `displayName` field).",
      +  "type": "string"
      +}
    • addedInput schema / properties / dryRun
      Added value: +{
      +  "description": "Preview rule without creating/updating (action=create, action=update)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / exceptBodyContains
      Added value: +{
      +  "description": "Comma-separated body keywords to exclude (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / exceptFromAddresses
      Added value: +{
      +  "description": "Comma-separated sender emails to exclude (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / exceptHasAttachments
      Added value: +{
      +  "description": "Exclude emails with attachments (action=create/update)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / exceptSenderContains
      Added value: +{
      +  "description": "Comma-separated partial sender matches to exclude (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / exceptSubjectContains
      Added value: +{
      +  "description": "Comma-separated subject keywords to exclude (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / forwardTo
      Added value: +{
      +  "description": "Comma-separated emails to forward matching messages to (action=create/update)",
      +  "type": "string"
      +}
    • changedInput schema / properties / fromAddresses / description
      Previous value: -"Comma-separated sender email addresses (action=create)"New value: +"Comma-separated sender emails to match (action=create/update)"
    • changedInput schema / properties / hasAttachments / description
      Previous value: -"Apply to emails with attachments (action=create)"New value: +"Match emails with attachments (action=create/update)"
    • addedInput schema / properties / importance
      Added value: +{
      +  "description": "Match emails with this importance (action=create/update)",
      +  "enum": [
      +    "low",
      +    "normal",
      +    "high"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / includeDetails / description
      Previous value: -"Include detailed rule conditions and actions (action=list)"New value: +"Include detailed conditions, actions, and exceptions (action=list)"
    • addedInput schema / properties / isAutomaticReply
      Added value: +{
      +  "description": "Match automatic reply emails (action=create/update)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / isEnabled / description
      Previous value: -"Enable rule after creation, default: true (action=create)"New value: +"Enable/disable rule (action=create default: true, action=update)"
    • changedInput schema / properties / markAsRead / description
      Previous value: -"Mark matching emails as read (action=create)"New value: +"Mark matching emails as read (action=create/update)"
    • addedInput schema / properties / markImportance
      Added value: +{
      +  "description": "Set importance on matching emails (action=create/update)",
      +  "enum": [
      +    "low",
      +    "normal",
      +    "high"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / moveToFolder / description
      Previous value: -"Folder to move matching emails to (action=create)"New value: +"Folder name to move matching emails to (action=create/update)"
    • changedInput schema / properties / name / description
      Previous value: -"Name of the rule to create (action=create, required)"New value: +"Rule name (action=create required, action=update to rename)"
    • addedInput schema / properties / recipientContains
      Added value: +{
      +  "description": "Comma-separated partial recipient matches (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / redirectTo
      Added value: +{
      +  "description": "Comma-separated emails to redirect matching messages to (action=create/update)",
      +  "type": "string"
      +}
    • changedInput schema / properties / ruleId / description
      Previous value: -"ID of the rule to delete (action=delete)"New value: +"ID of existing rule (action=update/delete)"
    • changedInput schema / properties / ruleName / description
      Previous value: -"Name of the rule (action=reorder required, action=delete alternative to ruleId)"New value: +"Name of existing rule (action=update/reorder/delete)"
    • addedInput schema / properties / senderContains
      Added value: +{
      +  "description": "Comma-separated partial sender matches (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / sensitivity
      Added value: +{
      +  "description": "Match emails with this sensitivity (action=create/update)",
      +  "enum": [
      +    "normal",
      +    "personal",
      +    "private",
      +    "confidential"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / sentCcMe
      Added value: +{
      +  "description": "Match emails where I am in CC (action=create/update)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / sentOnlyToMe
      Added value: +{
      +  "description": "Match emails where I am the only recipient (action=create/update)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / sentToAddresses
      Added value: +{
      +  "description": "Comma-separated recipient emails to match (action=create/update)",
      +  "type": "string"
      +}
    • addedInput schema / properties / sentToMe
      Added value: +{
      +  "description": "Match emails sent to me (action=create/update)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / sequence / description
      Previous value: -"Execution order, lower numbers run first (action=create default: 100, action=reorder required)"New value: +"Execution order, lower = higher priority (action=create default: auto, action=reorder required)"
    • addedInput schema / properties / stopProcessingRules
      Added value: +{
      +  "description": "Stop evaluating subsequent rules (action=create/update)",
      +  "type": "boolean"
      +}
  3. First observedv3.4.1

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: delete is the destructive path, dryRun previews create/update, rules execute server-side regardless of client, the recipient allowlist applies to forwardTo/redirectTo, changes count against a session limit governed by OUTLOOK_MAX_MANAGE_RULES_PER_SESSION (falling back to OUTLOOK_MAX_EMAILS_PER_SESSION) with 0 refusing changes, and there is no permanentDelete action.

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

Conciseness4/5

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

A single dense paragraph that front-loads the destructive warning and dryRun semantics before the action breakdown. Nearly every clause carries information, though the action list and parameter-group enumeration could be tightened.

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

Completeness5/5

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

For a 37-parameter, multi-action tool with no output schema, the description covers action semantics, defaults, side effects, allowlist constraints, and session limits, and briefly indicates the list return shape (id/name/sequence). An agent has what it needs to choose an action and call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds value by grouping parameters (12 condition params, 9 action params, except* exceptions) and noting folder syntax (name, nested path like Triage/Delete, well-known name, or ID). Most field-level detail, however, is already in the schema.

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

Purpose5/5

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

States a specific resource (server-side inbox rules) and enumerates the exact action set: list, create, update, reorder, delete. An agent can distinguish this from siblings like manage-category or manage-focused-inbox without opening the schema.

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

Usage Guidelines4/5

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

Gives per-action conditions and defaults (action=list default, dryRun only valid for create/update and refused elsewhere, ruleId vs ruleName for update/delete/reorder). It does not explicitly route to sibling tools, but the action-level guidance is concrete and actionable.

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