Local MCP server to read Outlook emails and attachments via Microsoft Graph, parsing PDFs, Office files, images, and more.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Claude MCP Read Email Attachments.
A local stdio MCP server for Claude Desktop that reads Outlook emails and their attachments β and sends local files (e.g. a daily dashboard .pptx) as Outlook attachments β through the Microsoft Graph API.
Status: Functional for personal single-user local use with Claude Desktop.
send_outlook_email β compose an Outlook email with local files attached (e.g. a .pptx) and either save it as a draft for review (default) or send it immediately (send_now: true). Small attachments only (each < 3 MB, inlined via Microsoft Graph).read_email β read the full text/body of a specific Outlook email (subject, sender, recipients, date; HTML converted to plain text). The original tools read attachments; this reads the message body itself.list_recent_messages now also returns a bodyPreview snippet per message.User.Read, Mail.ReadWrite, Mail.Send (was User.Read, Mail.Read). Existing users must add the new delegated permissions in Entra and re-consent.mcp_config nested under server) so it installs as a Desktop Extension (.mcpb) on current Claude Desktop. New optional config: M365_SEND_MAX_BYTES, M365_SEND_ALLOWED_DIRS.Claude's built-in Microsoft 365 connector can list emails, read message bodies, and check calendars. But it cannot read the actual content inside email attachments.
That means when you say "What does the PDF in my latest email say?", Claude can see the attachment metadata, but not the text, tables, images, or nested documents inside it.
This project fills that gap β running entirely on your local machine over stdio, with no public endpoints or tunnels required.
punkpeye/awesome-mcp-servers, a major community-curated registry of MCP servers.This server runs as a local MCP process started by Claude Desktop. It:
read_email| Format | What Gets Extracted |
|---|---|
| Full text content | |
| Scanned PDF | OCR text, plus optional rendered page images |
| DOCX | Text and embedded images |
| DOC | Text content |
| PPTX / PPTM / PPSX / POTX | Slide text, notes, and embedded images |
| PPT | Best-effort legacy text extraction |
| XLSX / XLS / CSV | All sheets converted to CSV |
| JPG / JPEG / PNG / GIF / WEBP / BMP / TIFF | Returned as MCP image blocks for visual analysis |
| ZIP / RAR / 7Z | Archive contents recursively parsed file by file |
| MSG | Subject, sender, body, and embedded attachments |
| TXT / MD / JSON / XML / HTML | Raw text |
Outlook itemAttachment | Text content |
| Tool | Description |
|---|---|
health_check | Check if the server is alive |
begin_auth | Start device code login flow |
auth_status | Check authentication status |
list_recent_messages | List recent Outlook emails |
list_email_attachments | List attachments for a specific email |
read_email_attachment | Download, parse, and return attachment content |
read_email | Read the full text/body of a specific Outlook email (subject, sender, recipients, date, body) |
send_outlook_email | Attach local files (e.g. .pptx) and save a draft (default) or send immediately |
Outbound send is opt-in per call.
send_outlook_emaildefaults to creating a draft in your Drafts folder β nothing leaves your mailbox until you review and send it in Outlook. Passsend_now: trueto send directly. Each attachment must be under 3 MB (see Limitations).
"Pull the last 5 Daily Dashboard emails, read the Excel attachments, and analyze the sales trend across all store locations over the past week."
"Find the latest email from our vendor with 'Invoice' in the subject, read the PDF attachment, and extract the total amount, due date, and line items."
"Open the most recent email from legal@partner.com, read the Word or PowerPoint attachment, and summarize the key terms."
"Find emails from recruiting@company.com with attachments, read each resume PDF, and create a comparison table of candidates."
"Attach
~/Desktop/Daily Dash.pptxand save a draft to my manager with the subject 'Daily Dash β today' β I'll review it before sending."
"Send
~/Desktop/Daily Dash.pptxto jane@contoso.com right now with the subject 'Daily Dash' and a one-line note."
Go to Microsoft Entra admin center β App registrations β New registration.
m365-mcp-localThen:
User.Read, Mail.ReadWrite, and Mail.Send β Grant admin consentrequestedAccessTokenVersion (it may be nested inside api) β set it to 2 β SaveWhy
Mail.ReadWrite+Mail.Send? Reading emails/attachments needs read access (Mail.ReadWriteincludes the oldMail.Read). Saving a draft needsMail.ReadWrite; sending needsMail.Send. Thesend_outlook_emailtool uses both. If you only ever want to read, you can drop down toUser.Read+Mail.Readand editSCOPESinserver.mjsaccordingly.
Already set up an earlier read-only version? Adding new scopes does not upgrade an existing login automatically. After adding
Mail.ReadWriteandMail.Send(and granting consent), restart Claude Desktop and runbegin_authagain β you'll be prompted to consent to the new permissions, and a fresh token with send rights is issued.
Why step 4? When your app supports personal Microsoft accounts, Microsoft Entra requires access tokens to be v2. The portal doesn't always set this automatically, and the
commonendpoint will fail withAADSTS50059if the token version is stillnullor1. If you skip this step you will getinvalid_granterrors duringbegin_auth.
Using v1 API integrations? Only set this to
2if all your Graph/API permissions support v2 tokens (all Microsoft Graph delegated permissions do). If you're integrating custom APIs that only accept v1 tokens, useM365_TENANT_ID=consumers(personal accounts only) or a specific tenant ID instead ofcommon, and leaverequestedAccessTokenVersionat its default.
Copy the example file:
Edit .env and fill in your client ID:
Variable reference:
| Variable | Required | Description |
|---|---|---|
M365_CLIENT_ID | β Yes | Your Entra app's Application (client) ID |
M365_TENANT_ID | No | Default common works for most accounts |
M365_AUTO_OPEN_BROWSER | No | Set true to auto-open Microsoft login page |
M365_MCP_DATA_DIR | No | Custom path for auth cache; auto-detected if omitted |
M365_SEND_MAX_BYTES | No | Total attachment-size budget for send_outlook_email (default 3145728 = 3 MB; must stay under Graph's ~4 MB request limit) |
M365_SEND_ALLOWED_DIRS | No | OS-path-separated allowlist of directories send_outlook_email may read from. Empty (default) = any readable path |
You'll need the full path to node.exe (Windows) or node (macOS/Linux) in the next step.
Example output: C:\Program Files\nodejs\node.exe
Locate and open the config file for your platform:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/zacccck-claude-mcp-read-email-attachments)<a href="https://allmcps.com/mcp/zacccck-claude-mcp-read-email-attachments"><img src="https://allmcps.com/api/badge/zacccck-claude-mcp-read-email-attachments?style=directory" alt="Claude MCP Read Email Attachments on AllMCPs" /></a>