Repository navigation
Releases
Releases · Pepebits/outlook-mcp
Bulk actions by search and large attachments
Added
bulk_actiontool: applydelete,move,archive,markRead,markUnread,flagorunflagto the messages matching a KQLqueryor filters. It runs as a dry run by default (count and a sample of 10), processes up tomaxmessages (default 100, hard cap 500) and reports per-message results, including the new id of each moved message.send_mailandcreate_draftaccept attachments of 3 MB up to 150 MB through Graph upload sessions, streamed from disk in chunks. If an upload fails,send_maildeletes its draft and sends nothing;create_draftkeeps the draft and lists the attachments that failed.
Prompt-injection hardening, keychain token storage and mail_digest
Added
- README setup for OpenAI Codex (
codex mcp addandconfig.toml) and other MCP clients. OUTLOOK_TOKEN_STORE(auto,keychain,file; defaultauto): the token cache is kept in the macOS Keychain (securityCLI) or the Linux Secret Service (secret-tool) when available, with no native dependencies. An existing cache file is imported into an empty keychain and deleted;logoutclears both. Windows and systems without a keychain keep using the file.mail_digesttool (read-only): counts, high-importance and flagged messages, and messages grouped by sender with a newsletter hint for a folder and time window.- Server-level MCP
instructionstelling clients that email content is untrusted and that sending, deleting, unsubscribing and rule changes should be confirmed with the user. - Tests for tool handlers using a fake Graph client.
Changed
- Tool results that include message content now group sender-controlled text (subjects, senders, previews, attachment names) under an
untrustedkey instead of top-levelsubject,from,previewandnamefields. This affectslist_messages,search_messages,get_message,list_attachments,find_newsletters,get_unsubscribe_infoandunsubscribe.download_attachmentnow returns the saved path asuntrusted.savedTo(it contains the sender-chosen file name) instead of a top-levelsavedTo.
Security
- Prompt-injection hardening:
get_messagebodies are enclosed in<untrusted_email_content>markers (with look-alike markers inside the content neutralized), results carry a note that email content is untrusted data, and tool descriptions say so. - The token cache is stored in the OS keychain by default where one is available, instead of a file. Secrets are passed to
secret-toolandsecurity -iover stdin, never as command-line arguments.
Listed in the MCP Registry
Added
- Listed in the official MCP Registry as
io.github.Pepebits/outlook-mcp(mcpNameandserver.json).
Changed
- Releases are staged on npm with provenance through Trusted Publishing and approved by a maintainer before they go live.
First stable release, now on npm
Added
- Published to npm as
@pepebits/outlook-mcp: install withnpx -y @pepebits/outlook-mcp. - Shared default Azure app for personal Microsoft accounts, so no app registration or
.envfile is needed.
Changed
OUTLOOK_CLIENT_IDis now optional. Set it (andOUTLOOK_TENANT) only to use your own Azure app, for example with work or school accounts.
Fixed
create_ruleandblock_senderreturn the rule that was created. On personal mailboxes Graph's response could describe a different, existing rule.
Bulk actions, newsletter cleanup, inbox rules and in-chat login
Added
login,auth_statusandlogouttools: sign in and out from the MCP client without a terminal.loginreturns the device code URL and code, and sign-in completes in the background.get_unsubscribe_infoandunsubscribetools: read List-Unsubscribe headers and leave a mailing list by RFC 8058 one-click or a mailto request.- Bulk operations:
delete_message,move_message,mark_read,flag_messageandunsubscribeacceptids(up to 50) as an alternative toid, report per-message results and never stop on the first error. find_newsletterstool: groups a folder's messages by sender and reports which senders are mailing lists and how to unsubscribe.- Inbox rule tools
list_rules,create_rule,delete_ruleandblock_sender. MailboxSettings.ReadWriteis now part of the defaultOUTLOOK_SCOPES. Add it in the Azure app registration and runnpm run authagain.
Changed
- Node.js 24 (LTS) or newer is now required.
- CI workflow actions updated.
Fixed
list_messageswithfromno longer fails withInefficientFilterwhen sorted by date.unsubscribereturns the unsubscribe link when the one-click request is refused, or fails with a network error or timeout.
Initial release
Features:
- Device code sign-in for personal and work Microsoft accounts
- List, search and read mail, download attachments
- Send, draft, reply, forward, move, flag and delete
- Optional read-only mode