mail
cmdhub adapter

Microsoft Outlook CLI
for cmdhub.

Outlook mail folders, messages, drafts, and attachments through Microsoft Graph.

lock Auth: OAuth2
Quick Install cmdhub get msoutlook

data_object Agent Contract

Agents should start with auth/status and discovery commands, inspect schemas before composition, and treat commands marked as mutating as state-changing operations.

Output

Use human output for normal reads, `--json` for scripting or complete structured fields, and `--jsonl` for upstream pipe inputs.

Auth

Microsoft OAuth. Used for Outlook messages, drafts, attachments, and mail sending.

Refs

Prefer list/search, then short refs or piped JSONL. Use `resolve` to inspect cached refs.

Schemas

Use `msoutlook schema` and `catalog.json` to inspect fields, flags, examples, and side effects.

Auth scopes

offline_accessUser.ReadMail.ReadWriteMail.Send

Optional scope bundles

With msoutlook auth login --mailbox-settings

MailboxSettings.ReadMailboxSettings.ReadWrite

With msoutlook auth login --shared

Mail.ReadWrite.SharedMail.Send.Shared

terminal Command Reference

Generated from source. Global flags apply to all commands.

Global Flags

--json bool Emit JSON machine output
--jsonl bool Emit JSONL records for piping
--output, -o string Compatibility output mode: json|jsonl. Prefer --json or --jsonl
--view string = summary View mode: summary|full
--profile string = default Config/auth profile
--config string Config path override
--quiet, -q bool Suppress non-essential diagnostics
--debug bool Enable debug diagnostics
--limit int = 50 Maximum items to emit
--page-size int = 50 Requested upstream page size
--cursor string Continuation cursor
--no-paginate bool Fetch only one page
--version, -v bool Print version information
--mailbox string Shared or delegated mailbox email/UPN to target for this command
msoutlook attachment Work with Outlook message attachments
#cmd-msoutlook-attachment discovery safe
$ msoutlook attachment list m1
$ msoutlook attachment get a1 --output-file ./file.txt
$ msoutlook attachment create d1 --file ./report.txt
msoutlook attachment create Add a file attachment to a draft message
#cmd-msoutlook-attachment-create mutates state
--file string File path to attach
--message string Message or draft ref/ID
$ msoutlook attachment create --help
$ msoutlook attachment create --message d1 --file ./report.txt
$ msoutlook attachment create d1 --file ./report.txt
msoutlook attachment delete Delete an attachment from a draft or message
#cmd-msoutlook-attachment-delete mutates state dry-run
--all bool Confirm batch attachment delete
--dry-run bool Preview attachment deletion without deleting
--message string Message ref or ID when attachment is not a local ref
--yes bool Confirm attachment deletion
$ msoutlook attachment delete --all --yes a1 a2
$ msoutlook attachment delete --help
$ msoutlook attachment delete AAMk... --message d1 --yes
$ msoutlook attachment delete a1 --dry-run
$ msoutlook attachment delete a1 --yes
$ msoutlook attachment list d1 --jsonl | msoutlook attachment delete --all --yes
msoutlook attachment download Download an attachment to a file
#cmd-msoutlook-attachment-download discovery safe
--message string Message ref or ID when attachment is not a local ref
--output-file string Write decoded attachment bytes to this path
$ msoutlook attachment download
$ msoutlook attachment download AAMk... --message m1 --output-file ./attachment.bin
$ msoutlook attachment download a1 --output-file ./attachment.bin
msoutlook attachment get Get an attachment
#cmd-msoutlook-attachment-get discovery safe
--emit-content bool Include base64 content in JSON output
--message string Message ref or ID when attachment is not a local ref
--output-file string Write decoded attachment bytes to this path
$ msoutlook attachment get
$ msoutlook attachment get AAMk... --message m1 --json
$ msoutlook attachment get a1
$ msoutlook attachment get a1 --output-file ./attachment.bin
msoutlook attachment list List message attachments
#cmd-msoutlook-attachment-list discovery safe
--message string Message ref or ID
$ msoutlook attachment list
$ msoutlook attachment list --message d1
$ msoutlook attachment list m1
$ msoutlook message get m1 --jsonl | msoutlook attachment list
msoutlook auth Manage Microsoft authentication
#cmd-msoutlook-auth discovery safe
$ msoutlook auth --help
msoutlook auth login Authenticate with Microsoft Outlook
#cmd-msoutlook-auth-login mutates state

Authenticate with Microsoft device-code OAuth for Microsoft Graph Outlook mail.

This stores a Microsoft OAuth grant in the shared cmdhub credential backend. Use a Microsoft account browser sign-in and consent prompt; do not enter a normal account password in this CLI. The default packaged public client requests delegated Outlook scopes and refresh-token consent.

--shared bool Request delegated shared-mailbox read/write and send scopes
$ msoutlook auth login
$ msoutlook auth login --help
$ msoutlook auth status
msoutlook auth logout Remove stored Microsoft credentials
#cmd-msoutlook-auth-logout mutates state

Remove the stored Microsoft OAuth grant for the selected msoutlook profile.

This deletes the local access token, refresh token, and Microsoft identity metadata from the shared credential backend. It does not revoke consent in Microsoft Entra.

$ msoutlook auth logout
$ msoutlook auth logout --help
$ msoutlook auth status
msoutlook auth refresh Refresh stored token
#cmd-msoutlook-auth-refresh mutates state

Refresh the stored Microsoft OAuth grant through the shared credential backend.

Use –shared when refreshing a profile that was granted delegated shared-mailbox scope.

--shared bool Refresh a token that includes delegated shared-mailbox read/write and send scopes
$ msoutlook auth refresh
$ msoutlook auth refresh --help
$ msoutlook auth refresh --shared
$ msoutlook auth status
msoutlook auth status Show auth status
#cmd-msoutlook-auth-status discovery safe

Show the stored Microsoft OAuth grant status for the selected msoutlook profile.

The status names the credential backend, Microsoft account identity, required Microsoft Graph scopes, missing scopes, token validity, and the exact login command to recover.

--shared bool Check delegated shared-mailbox read/write and send scopes
$ msoutlook auth status
$ msoutlook auth status --help
$ msoutlook auth status --json
$ msoutlook auth status --view full
msoutlook auth whoami Show current Microsoft identity
#cmd-msoutlook-auth-whoami discovery safe
$ msoutlook auth whoami
$ msoutlook auth whoami --help
$ msoutlook auth whoami --view full
msoutlook capabilities Describe capabilities
#cmd-msoutlook-capabilities discovery safe
--section string Show one capability section: scopes, schemas, or commands
$ msoutlook capabilities
$ msoutlook capabilities --help
$ msoutlook capabilities --json
$ msoutlook capabilities --section scopes
msoutlook config Inspect local configuration
#cmd-msoutlook-config discovery safe
$ msoutlook config --help
msoutlook config explain Explain resolved configuration
#cmd-msoutlook-config-explain discovery safe
$ msoutlook config explain --help
msoutlook conversation Work with Outlook message conversations
#cmd-msoutlook-conversation discovery safe
$ msoutlook conversation list --folder inbox --limit 10
$ msoutlook conversation search --query "quarterly packet"
$ msoutlook conversation get cv1 --view full
msoutlook conversation archive Archive every message in a conversation
#cmd-msoutlook-conversation-archive mutates state
--all bool Apply the action to every message in the conversation
--yes bool Confirm the conversation mutation
$ msoutlook conversation archive --help
$ msoutlook conversation archive cv1 --all --yes
msoutlook conversation delete Delete every message in a conversation
#cmd-msoutlook-conversation-delete mutates state dry-run
--all bool Apply the action to every message in the conversation
--dry-run bool Preview conversation message deletion without deleting
--yes bool Confirm the conversation mutation
$ msoutlook conversation delete --help
$ msoutlook conversation delete cv1 --all --yes
$ msoutlook conversation delete cv1 --dry-run
msoutlook conversation get Get a conversation
#cmd-msoutlook-conversation-get discovery safe
$ msoutlook conversation get
$ msoutlook conversation get cv1 --view full
msoutlook conversation list List conversations
#cmd-msoutlook-conversation-list discovery safe
--folder string Folder ref, ID, or well-known name such as inbox
--query string Search text or Graph-style fielded terms
--unread bool Only show conversations with unread messages
$ msoutlook conversation list
$ msoutlook conversation list --query invoice --folder inbox
msoutlook conversation move Move every message in a conversation
#cmd-msoutlook-conversation-move discovery safe
--all bool Apply the action to every message in the conversation
--folder string Destination folder ref, ID, or well-known name
--yes bool Confirm the conversation mutation
$ msoutlook conversation move --help
$ msoutlook conversation move cv1 --all --yes
msoutlook conversation read Mark every message in a conversation read
#cmd-msoutlook-conversation-read mutates state
--all bool Apply the action to every message in the conversation
--yes bool Confirm the conversation mutation
$ msoutlook conversation read --help
$ msoutlook conversation read cv1 --all --yes
msoutlook conversation unread Mark every message in a conversation unread
#cmd-msoutlook-conversation-unread mutates state
--all bool Apply the action to every message in the conversation
--yes bool Confirm the conversation mutation
$ msoutlook conversation unread --help
$ msoutlook conversation unread cv1 --all --yes
msoutlook doctor Run msoutlook diagnostics
#cmd-msoutlook-doctor discovery safe
$ msoutlook doctor
$ msoutlook doctor --help
$ msoutlook doctor --json
$ msoutlook doctor --view full
msoutlook draft Work with Outlook drafts
#cmd-msoutlook-draft discovery safe
$ msoutlook draft list
$ msoutlook draft search --query review
$ msoutlook draft get d1 --view full
$ msoutlook draft update d1 --body "Revised body"
msoutlook draft create Create a draft
#cmd-msoutlook-draft-create mutates state
--attach stringSlice = [] File path(s) to attach
--bcc stringSlice = [] Bcc recipient; repeat or comma-separate
--body string Message body
--body-file string Read message body from file
--category stringSlice = [] Category name/ref; repeat or comma-separate
--cc stringSlice = [] Cc recipient; repeat or comma-separate
--content-type string Body content type: text or html
--importance string Importance: low, normal, or high
--subject string Message subject
--to stringSlice = [] Recipient; repeat or comma-separate
$ msoutlook draft create --help
$ msoutlook draft create --to alice@example.com --subject "Review" --body "Draft body"
$ msoutlook draft create --to alice@example.com --subject "With file" --body "Attached" --attach ./report.txt
msoutlook draft delete Delete a draft
#cmd-msoutlook-draft-delete mutates state dry-run
--all bool Confirm batch draft delete
--dry-run bool Preview draft deletion without deleting
--yes bool Confirm destructive batch draft delete
$ msoutlook draft delete --all --yes d1 d2
$ msoutlook draft delete --help
$ msoutlook draft delete d1 --dry-run
$ msoutlook draft delete d1 --yes
$ msoutlook draft list --jsonl | msoutlook draft delete --all --yes
msoutlook draft get Get a draft
#cmd-msoutlook-draft-get discovery safe
$ msoutlook draft get
$ msoutlook draft get d1
$ msoutlook draft get d1 --view full
$ msoutlook draft get d1 d2
$ msoutlook draft list --limit 2 --jsonl | msoutlook draft get
msoutlook draft list List draft messages
#cmd-msoutlook-draft-list discovery safe
--query string Filter drafts locally
$ msoutlook draft list
$ msoutlook draft list --jsonl | msoutlook draft get
$ msoutlook draft list --query review --limit 10
msoutlook draft send Send a draft
#cmd-msoutlook-draft-send mutates state
$ msoutlook draft list --limit 1 --jsonl | msoutlook draft send
$ msoutlook draft send --help
$ msoutlook draft send d1
msoutlook draft update Update a draft
#cmd-msoutlook-draft-update mutates state
--attach stringSlice = [] File path(s) to add as attachments
--bcc stringSlice = [] Bcc recipient; repeat or comma-separate
--body string New body
--body-file string Read new body from file
--category stringSlice = [] Category name/ref; repeat or comma-separate
--cc stringSlice = [] Cc recipient; repeat or comma-separate
--content-type string Body content type: text or html
--importance string Importance: low, normal, or high
--subject string New subject
--to stringSlice = [] Recipient; repeat or comma-separate
$ msoutlook draft update --help
$ msoutlook draft update d1 --attach ./report.txt
$ msoutlook draft update d1 --body "Revised body" --importance high
$ msoutlook draft update d1 --subject "Updated subject"
msoutlook folder Work with Outlook mail folders
#cmd-msoutlook-folder discovery safe
$ msoutlook folder list
$ msoutlook folder search --query sent
$ msoutlook folder get f1 --view full
msoutlook folder create Create a mail folder
#cmd-msoutlook-folder-create mutates state
--name string Folder display name
--parent string Parent folder ref, ID, or well-known name
$ msoutlook folder create --help
$ msoutlook folder create --name "cmdhub child" --parent f1
$ msoutlook folder create --name "cmdhub triage"
msoutlook folder delete Delete an ordinary mail folder
#cmd-msoutlook-folder-delete mutates state dry-run
--dry-run bool Preview recursive folder deletion without changing the mailbox
--recursive bool Allow deleting a folder that contains messages or child folders
--yes bool Confirm folder deletion
$ msoutlook folder delete --help
$ msoutlook folder delete f1 --recursive --dry-run
$ msoutlook folder delete f1 --recursive --yes
$ msoutlook folder delete f1 --yes
msoutlook folder get Get a mail folder
#cmd-msoutlook-folder-get discovery safe
$ msoutlook folder get
$ msoutlook folder get f1
$ msoutlook folder get f1 f2
$ msoutlook folder get inbox --view full
$ msoutlook folder list --query sent --limit 2 --jsonl | msoutlook folder get
msoutlook folder list List mail folders
#cmd-msoutlook-folder-list discovery safe
--query string Filter folder names locally
$ msoutlook folder list
$ msoutlook folder list --jsonl | msoutlook message list --limit 10
$ msoutlook folder list --query archive --limit 5
msoutlook folder move Move a mail folder under another folder
#cmd-msoutlook-folder-move discovery safe
--parent string Destination parent folder ref, ID, or well-known name
$ msoutlook folder move --help
$ msoutlook folder move f1 --parent archive
msoutlook folder update Rename a mail folder
#cmd-msoutlook-folder-update mutates state
--name string New folder display name
$ msoutlook folder update --help
$ msoutlook folder update f1 --name "cmdhub triage done"
msoutlook mailbox Inspect the selected Outlook mailbox
#cmd-msoutlook-mailbox discovery safe
$ msoutlook mailbox --help
msoutlook mailbox get Get selected mailbox metadata
#cmd-msoutlook-mailbox-get discovery safe
$ msoutlook mailbox get
$ msoutlook mailbox get --json
msoutlook mcp Run the MCP server
#cmd-msoutlook-mcp discovery safe

Run a stdio Model Context Protocol server for this adapter.

The server exposes read-only resource commands by default. Mutating commands are listed only when explicitly allowed with –allow and remain gated by the command contract safety class.

--allow stringArray = [] Allow mutating command keys such as gmail.message.archive or gmail.message.label.*
--allow-dangerous bool Allow --allow wildcards to include destructive or sends_external commands
--concurrency int Maximum concurrent MCP subprocesses
--max-output int64 = 0 Maximum stdout/stderr bytes captured per MCP command
--print-config bool Print MCP tool configuration and exit
--timeout duration = 0s Per-command MCP subprocess timeout, for example 45s or 2m
$ mcp
$ mcp --print-config
msoutlook message Work with Outlook messages
#cmd-msoutlook-message discovery safe
$ msoutlook message list --folder inbox --limit 10
$ msoutlook message get m1 --view full
$ msoutlook message reply m1 --draft --body "Received."
msoutlook message archive Move a message to archive
#cmd-msoutlook-message-archive mutates state
--all bool Confirm batch message mutation
$ msoutlook message archive --all m1 m2
$ msoutlook message archive --help
$ msoutlook message archive m1
$ msoutlook message list --folder inbox --jsonl | msoutlook message archive --all
msoutlook message categorize Add a category to a message
#cmd-msoutlook-message-categorize discovery safe
--category string Category ref, name, or ID
$ msoutlook message categorize --help
$ msoutlook message categorize m1 --category cat1
msoutlook message copy Copy a message to another folder
#cmd-msoutlook-message-copy discovery safe
--folder string Destination folder ref, ID, or well-known name
$ msoutlook message copy --help
$ msoutlook message copy m1 --folder f2
msoutlook message create Create or send a message
#cmd-msoutlook-message-create mutates state
--attach stringSlice = [] File path(s) to attach
--bcc stringSlice = [] Bcc recipient; repeat or comma-separate
--body string Message body
--body-file string Read message body from file
--category stringSlice = [] Category name/ref; repeat or comma-separate
--cc stringSlice = [] Cc recipient; repeat or comma-separate
--content-type string Body content type: text or html
--draft bool Save as draft instead of sending
--importance string Importance: low, normal, or high
--subject string Message subject
--to stringSlice = [] Recipient; repeat or comma-separate
$ msoutlook message create --help
$ msoutlook message create --to alice@example.com --subject "Review" --body "Save first" --draft
$ msoutlook message create --to alice@example.com --subject "Status" --body "Sent now"
$ msoutlook message create --to alice@example.com --subject "With file" --body "Attached" --attach ./report.txt --draft
msoutlook message delete Delete a message
#cmd-msoutlook-message-delete mutates state dry-run
--all bool Confirm batch message delete
--dry-run bool Preview message deletion without deleting
--yes bool Confirm destructive batch message delete
$ msoutlook message delete --all --yes m1 m2
$ msoutlook message delete --help
$ msoutlook message delete m1 --dry-run
$ msoutlook message delete m1 --yes
$ msoutlook message list --folder inbox --jsonl | msoutlook message delete --all --yes
msoutlook message forward Forward a message
#cmd-msoutlook-message-forward mutates state
--body string Forward comment
--draft bool Create a forward draft instead of sending
--to stringSlice = [] Forward recipient; repeat or comma-separate
$ msoutlook message forward --help
$ msoutlook message forward m1 --to alice@example.com --body "FYI"
$ msoutlook message forward m1 --to alice@example.com --draft --body "FYI"
msoutlook message get Get a message
#cmd-msoutlook-message-get discovery safe
$ msoutlook message get
$ msoutlook message get m1
$ msoutlook message get m1 --view full
$ msoutlook message get m1 m2
$ msoutlook message list --folder inbox --limit 2 --jsonl | msoutlook message get
msoutlook message list List messages
#cmd-msoutlook-message-list discovery safe
--before string Only messages received before this date/time
--category string Category name or ref to match
--folder string Folder ref, ID, or well-known name such as inbox
--from string Sender email, display name, or Graph sender token
--graph-search bool Send --query and typed search terms to Microsoft Graph $search
--has-attachments bool Only messages with attachments
--query string Filter messages by subject, sender, recipient, or preview
--since string Only messages received on or after this date/time
--to string Recipient email, display name, or Graph recipient token
--unread bool Only show unread messages
$ msoutlook folder list --query sent --limit 1 --jsonl | msoutlook message list --limit 5
$ msoutlook message list
$ msoutlook message list --folder inbox --limit 10
$ msoutlook message list inbox --query invoice --unread
msoutlook message move Move a message to another folder
#cmd-msoutlook-message-move discovery safe
--folder string Destination folder ref, ID, or well-known name
$ msoutlook message move --help
$ msoutlook message move m1 --folder archive
$ msoutlook message move m1 --folder f2
msoutlook message read Mark a message read
#cmd-msoutlook-message-read mutates state
--all bool Confirm batch message mutation
$ msoutlook message list --folder inbox --jsonl | msoutlook message read --all
$ msoutlook message read --all m1 m2
$ msoutlook message read --help
$ msoutlook message read m1
msoutlook message reply Reply to a message
#cmd-msoutlook-message-reply mutates state
--body string Reply body
--draft bool Create a reply draft instead of sending
$ msoutlook message reply --help
$ msoutlook message reply m1 --body "Sent now"
$ msoutlook message reply m1 --draft --body "Received."
msoutlook message reply-all Reply all to a message
#cmd-msoutlook-message-reply-all discovery safe
--body string Reply-all body
--draft bool Create a reply-all draft instead of sending
$ msoutlook message reply-all --help
$ msoutlook message reply-all m1 --body "Sent now"
$ msoutlook message reply-all m1 --draft --body "Thanks all."
msoutlook message restore Restore a deleted message to a folder
#cmd-msoutlook-message-restore discovery safe
--folder string Destination restore folder
$ msoutlook message restore --help
$ msoutlook message restore m1 --folder inbox
msoutlook message send Send a draft or one explicit message
#cmd-msoutlook-message-send mutates state
--attach stringSlice = [] File path(s) to attach
--bcc stringSlice = [] Bcc recipient; repeat or comma-separate
--body string Message body
--body-file string Read message body from file
--category stringSlice = [] Category name/ref; repeat or comma-separate
--cc stringSlice = [] Cc recipient; repeat or comma-separate
--content-type string Body content type: text or html
--importance string Importance: low, normal, or high
--subject string Message subject
--to stringSlice = [] Recipient; repeat or comma-separate
$ msoutlook draft list --limit 1 --jsonl | msoutlook message send
$ msoutlook message send --help
$ msoutlook message send --to alice@example.com --subject "Status" --body "Sent now"
$ msoutlook message send d1
msoutlook message uncategorize Remove a category from a message
#cmd-msoutlook-message-uncategorize discovery safe
--category string Category ref, name, or ID
$ msoutlook message uncategorize --help
$ msoutlook message uncategorize m1 --category cat1
msoutlook message unread Mark a message unread
#cmd-msoutlook-message-unread mutates state
--all bool Confirm batch message mutation
$ msoutlook message list --folder inbox --jsonl | msoutlook message unread --all
$ msoutlook message unread --all m1 m2
$ msoutlook message unread --help
$ msoutlook message unread m1
msoutlook message update Update a message or draft
#cmd-msoutlook-message-update mutates state
--attach stringSlice = [] File path(s) to add as attachments
--bcc stringSlice = [] Bcc recipient; repeat or comma-separate
--body string New body
--body-file string Read new body from file
--category stringSlice = [] Category name/ref; repeat or comma-separate
--cc stringSlice = [] Cc recipient; repeat or comma-separate
--content-type string Body content type: text or html
--importance string Importance: low, normal, or high
--subject string New subject
--to stringSlice = [] Recipient; repeat or comma-separate
$ msoutlook message update --help
$ msoutlook message update d1 --attach ./report.txt
$ msoutlook message update d1 --body "Revised body" --importance high
$ msoutlook message update d1 --subject "Updated subject"
msoutlook profile Manage provider profiles
#cmd-msoutlook-profile discovery safe
$ msoutlook profile --help
msoutlook profile create Create an unauthenticated provider profile
#cmd-msoutlook-profile-create mutates state
$ msoutlook profile create --help
msoutlook profile delete Delete a local provider profile
#cmd-msoutlook-profile-delete mutates state
$ msoutlook profile delete --help
msoutlook profile list List provider profiles
#cmd-msoutlook-profile-list discovery safe
$ msoutlook profile list --help
msoutlook profile rename Rename a local provider profile
#cmd-msoutlook-profile-rename discovery safe
$ msoutlook profile rename --help
msoutlook profile use Set the default provider profile
#cmd-msoutlook-profile-use mutates state
$ msoutlook profile use --help
msoutlook resolve Resolve a local msoutlook reference
#cmd-msoutlook-resolve discovery safe
$ msoutlook resolve --help
$ msoutlook resolve d1 --view full
$ msoutlook resolve m1
$ msoutlook resolve u1
msoutlook schema Emit msoutlook schema hints
#cmd-msoutlook-schema discovery safe

Show schema hints for Outlook resource payloads emitted or accepted by this CLI.

Use this when you need to understand structured output fields for automation or downstream parsing.

--in bool Show input schema
--input bool Show input schema
--out bool Show output schema
--schema-output bool Show output schema
$ msoutlook schema
$ msoutlook schema --help
$ msoutlook schema draft.update --in --json
$ msoutlook schema message.create --in
$ msoutlook schema message.get --out
msoutlook version Print version information
#cmd-msoutlook-version discovery safe
$ msoutlook version
$ msoutlook version --help
$ msoutlook version --json
$ msoutlook version --view full

play_circle Live Examples

Output captured from a real workspace. Regenerate with scripts/gen-docs.sh --update.

auth

Check Microsoft auth status
$ msoutlook auth status
Not logged in.

Next steps:
- Login: msoutlook auth login
Run diagnostics
$ msoutlook doctor
msoutlook doctor: FAIL
Checks: credential_backend ok, credential_security warn, profiles warn, microsoft_oauth ok, token fail
CHECK                STATUS  DETAIL
credential_backend   OK      using file
credential_security  WARN    credential backend stores local plaintext secrets
profiles             WARN    no provider profiles configured
microsoft_oauth      OK      Microsoft Outlook OAuth client is configured
token                FAIL    no stored Microsoft token

Next steps:
- Status:       msoutlook auth login
- Capabilities: msoutlook capabilities

schemas

Inspect message schema
$ msoutlook schema message.create --in
Schema: msoutlook.message.create.input.v1 (msoutlook message create input)
Required: to, subject
Optional: cc, bcc, body, importance, attach, draft

overview

Show capabilities
$ msoutlook capabilities
msoutlook capabilities
Resources: attachment, auth, automatic-reply, capabilities, category, config, conversation, doctor, draft, folder, mailbox, mailbox-settings, message, profile, resolve, rule, schema, version
Machine output: --json, --jsonl
Required scopes: Mail.ReadWrite, Mail.Send, User.Read, offline_access

Next steps:
- Scopes:   msoutlook capabilities --section scopes
- Schema:   msoutlook schema
- Contract: msoutlook capabilities --json
- Help:     msoutlook --help

alt_route Composition Patterns

Bridge your ecosystem with zero middleware.

msoutlook auth login

# Read Outlook mail
msoutlook folder list
msoutlook message list --folder inbox --limit 10
msoutlook message get m1
msoutlook resolve u1

# Create and send mail
msoutlook message create --to alice@example.com --subject "Status" --body "Sent now"
msoutlook message create --to alice@example.com --subject "Status" --body "Attached" --attach ./status.txt
msoutlook message create --to alice@example.com --subject "Status" --body "Save first" --draft
msoutlook draft update d1 --attach ./status.txt
msoutlook draft send d1
msoutlook attachment list m1
msoutlook attachment get a1 --emit-content --json

# Pipe one listed message into a follow-up command
msoutlook message list --folder inbox --limit 1 --jsonl | msoutlook message get