Atlas / MCP servers / xenoxilus / Outlook

OutlookBLOCK

mcp/xenoxilus/outlook-8

MCP server for Microsoft Office 365 Outlook – email, calendar & SharePoint integration for Claude, ChatGPT, and AI assistants via Microsoft Graph API

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
53 34r · 17w · 2d
Transport
stdio
License
—
Stars
26
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A Model Context Protocol (MCP) server that enables AI assistants to interact with Microsoft Outlook email and calendar through the Microsoft Graph API.

[](https://github.com/XenoXilus/outlook-mcp/releases/latest) [](https://ko-fi.com/xenoxilus)

Features

  • Email Operations: Read, search, send, reply to emails and download attachments
  • SharePoint Integration: Access SharePoint files via sharing links or direct file IDs. Download files shared to you via emails.
  • Calendar Management: View and manage calendar events and appointments
  • Office Document Processing: Parse PDF, Word, PowerPoint, and Excel files with extracted text content
  • Receipt & Invoice Collection: Discover emailed receipts by sender/subject/date, save them as verified and consistently named PDFs (attachment, billing link, or rendered fallback), and stage a review draft — built for scheduled, non-interactive runs
  • Large File Support: Automatic handling of files that exceed MCP response size limits

Quick Start

Choose your installation method:

Prerequisites: Before installing, you'll need to set up an Azure application to get your Client ID and Tenant ID.

Installation

Installing as DXT Extension

For Claude Desktop users, DXT extensions provide the simplest installation experience.

Option 1: Download Pre-built Extension

  1. Download outlook-mcp.dxt from the Releases page
  2. In Claude Desktop, go to Settings → Extensions
  3. Click **Install
Read from source at commit ddda38e1aa8cOBSERVED · 2026-10-09
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add outlook-mcp --env MCP_OUTLOOK_AUTH_MODE=${MCP_OUTLOOK_AUTH_MODE} --env MCP_OUTLOOK_REFRESH_TOKEN_PATH=${MCP_OUTLOOK_REFRESH_TOKEN_PATH} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "outlook-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "MCP_OUTLOOK_AUTH_MODE": "${MCP_OUTLOOK_AUTH_MODE}",
        "MCP_OUTLOOK_REFRESH_TOKEN_PATH": "${MCP_OUTLOOK_REFRESH_TOKEN_PATH}"
      }
    }
  }
}
03

Exposed tools (53)

34 read · 17 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
check_recent_unreadreadCheck unread emails from the last 36 hours, summarize them, and highlight action items
draft_replyreadDraft a reply to a specific email with a specified tone
email_idreadThe ID of the email to reply to
outlook_add_attachmentwriteAdd an attachment to an email draft
outlook_archive_emailwriteArchive an email (move to Archive folder)
outlook_batch_process_emailsreadPerform bulk operations on multiple emails
outlook_build_recurrence_patternreadBuild a recurrence pattern object
outlook_categorize_emailwriteApply categories to an email
outlook_check_availabilityreadCheck availability for users
outlook_check_calendar_permissionsreadCheck permissions for a calendar
outlook_collect_receiptsreadCollect all vendor receipts for a period in one call: discovers each vendor\
outlook_create_draftwriteCreate an email draft without sending
outlook_create_eventwriteCreate a new calendar event in Outlook with optional Teams meeting integration
outlook_create_folderwriteCreate a new email folder
outlook_create_recurrence_helperwriteHelper to create a recurring event with simplified inputs
outlook_create_recurring_eventwriteCreate a recurring calendar event
outlook_delete_emaildestructiveDelete an email (move to Deleted Items or permanently delete)
outlook_delete_eventdestructiveDelete a calendar event
outlook_download_attachmentwriteDownload a specific email attachment. Set saveToFile (or destDir/fileName) to write the raw bytes server-side and get back only {savedPath, size, sha256} — the reliable route for binary files, since inline base64 exceeds the MCP response cap above ~20 KB.
outlook_extract_receiptreadExtract a compact structured summary (vendor, amount, currency, receipt/invoice numbers, product label, billing link, attachment ids) from a receipt email — instead of its large HTML body.
outlook_fetch_billing_pdfreadFetch a billing PDF from an allowlisted host (default: Stripe) linked in an email body, and save it. Fallback for receipts without PDF attachments. HTTPS-only, allowlist-only, validated as PDF. Provide url or messageId (at least one). If both are given, url takes precedence.
outlook_find_meeting_timesreadFind optimal meeting times for attendees
outlook_flag_emailreadFlag or unflag an email for follow-up
outlook_forward_emailreadForward an existing email to new recipients
outlook_get_busy_timesreadGet busy times for users
outlook_get_calendar_viewreadGet a view of a calendar for a specific time range
outlook_get_emailreadGet detailed information about a specific email
outlook_get_eventreadGet a specific calendar event
outlook_get_folder_statsreadGet statistics for a specific folder
outlook_get_sharepoint_filereadFetch a SharePoint file using the same authenticated session as Outlook. Handles sharing links from emails. Either sharePointUrl OR fileId must be provided.
outlook_list_attachmentsreadList all attachments for a specific email
outlook_list_calendarsreadList available calendars
outlook_list_emailsreadList emails from Outlook inbox or specified folder
outlook_list_eventsreadList calendar events from Outlook
outlook_list_foldersreadList all email folders
outlook_list_sharepoint_filesreadList files in SharePoint sites or OneDrive folders using the same authenticated session
outlook_mark_as_readreadMark an email as read or unread
outlook_move_emailwriteMove an email to a different folder
outlook_rename_folderwriteRename an existing email folder
outlook_render_email_pdfreadRender an email\
outlook_reply_allreadReply to all recipients of an existing email
outlook_reply_to_emailreadReply to an existing email
outlook_resolve_sharepoint_linkreadResolve SharePoint sharing links from emails to get file metadata without downloading
outlook_respond_to_invitereadRespond to a meeting invitation
outlook_save_attachmentwriteSave an email attachment\
outlook_scan_attachmentsreadScan emails for large or suspicious attachments
outlook_schedule_online_meetingwriteSchedule an online meeting (Teams/Skype)
outlook_search_emailsreadSearch emails across all folders with advanced filters for analysis
outlook_send_emailwriteSend an email through Outlook
outlook_update_eventwriteUpdate an existing calendar event
outlook_validate_event_datetimeswriteValidate event start and end times
summarize_schedulewriteSummarize today\
tonereadThe tone of the response (e.g., professional, casual, urgent)
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (4 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (13)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
server/auth/auth.js:41
exec(command, (error) => {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
outlook_delete_email, outlook_delete_event
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.dxtignore
.dxtignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
server/auth/tokenManager.js:47
dir: (process.env.MCP_OUTLOOK_REFRESH_TOKEN_PATH || '').trim() || path.join(__dirname, '../../.tokens'),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
server/tests/auth/callbackServer.test.js:3
import { OutlookAuthManager } from '../../auth/auth.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
server/tests/auth/headlessAuth.test.js:2
import { OutlookAuthManager } from '../../auth/auth.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
server/tests/auth/headlessAuth.test.js:3
import { authConfig } from '../../auth/config.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
server/tests/graph/folderResolver.test.js:2
import { GraphApiClient } from '../../graph/graphClient.js';
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@azure/identity, @microsoft/microsoft-graph-client, @modelcontextprotocol/sdk, dotenv, isomorphic-dompurify, node-persist, officeparser, xlsx
Why it matters. 10 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
README.md:133
- (Optional) If you are an admin, click **Grant admin consent** to suppress consent prompts for users.
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
README.md:222
- Exchange **Full Access** delegation to the shared mailbox for the signed-in
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
README.md:231
Graph offers no delegated API that lists the mailboxes you hold Full Access to,

Gates applied: no_behavioural_pass, no_license.

Audited 2026-10-09 · audit v0.4.1 · source sha ddda38e1aa8cfull audit observations/trust-audit/mcp-server/xenoxilus__outlook-8.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-09ddda38e1aa8cBLOCKD69first audit
06

Questions

What is the Outlook MCP server?

MCP server for Microsoft Office 365 Outlook – email, calendar & SharePoint integration for Claude, ChatGPT, and AI assistants via Microsoft Graph API

What tools does Outlook expose?

53 in total: 34 read-only, 17 that write, and 2 that can delete or overwrite (outlook_delete_email, outlook_delete_event). Every one is listed on this page with its risk.

Is Outlook safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Outlook need?

It reads MCP_OUTLOOK_AUTH_MODE and MCP_OUTLOOK_REFRESH_TOKEN_PATH from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Outlook run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as outlook-mcp at 1.3.2.

How current is this page?

The grade is for one exact copy of the source (ddda38e1aa8c), read on 2026-10-09. The repository is watched and re-audited when it changes.

Advertisement