GitHub - MiguelRipoll23/eml-mcp: MCP/CLI server for interacting with your .eml files

3 min read Original article ↗

MCP server for managing email archives stored as .eml files. Designed to work alongside a pair of Power Automate flows that automatically export Outlook emails to OneDrive as .eml files, giving AI assistants full read and write access to your inbox, sent items, and drafts through a structured set of tools.

Comes with a CLI (eml) for standalone use outside of an AI assistant.

Requirements

  • Node.js 20+
  • A OneDrive folder (synced locally) — inbox/, outbox/, and drafts/ sub-directories are created automatically on first run

Add to your MCP client

Claude Code
claude mcp add eml -- npx -y eml-mcp /path/to/emails --from=you@example.com
GitHub Copilot

Add to ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "eml": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/eml-mcp/dist/server.js", "/path/to/emails", "--from=you@example.com"]
    }
  }
}
Codex CLI

Add to ~/.codex/config.toml:

[mcp_servers.eml]
command = "npx"
args = ["-y", "eml-mcp", "/path/to/emails", "--from=you@example.com"]

Arguments (MCP server)

Argument Required Description
<email-directory> Yes Root directory; inbox/, outbox/, and drafts/ sub-directories must exist inside
--from=<address> No From address for composed drafts (default: draft@eml-mcp)
--data-path=<path> No Base data directory (default: ~/.eml)

Power Automate — Automatic .eml archiving

Each flow watches one Outlook folder and saves every email as an .eml file to the corresponding OneDrive directory. Set up the inbox flow first, then duplicate it for sent items — the only two values that change are noted in the second section.

Inbox flow — archive received emails

Trigger

When a new email arrives (V3) — Office 365 Outlook

Set the folder to Inbox. Add subject/sender filters as needed.

Step 1 — Export email (V2)

Export email (V2) — Office 365 Outlook

  • Message Id: Message Id (dynamic value from trigger)

This action returns the raw MIME content of the email (RFC-2822 format, compatible with .eml).

Step 2 — Create file

Create file — OneDrive for Business

  • Folder Path: /Outlook/inbox
  • File Name: <Subject>-<Received Time>.eml — compose using dynamic values from the trigger, sanitizing characters not allowed in file names
  • File Content: Body (dynamic value from the Export email (V2) step)

The file is created in OneDrive and, on next refresh_index call or server restart, it will be picked up automatically by eml-mcp tagged as inbox.

Sent Items flow — archive sent emails

Duplicate the inbox flow and change only two values:

  • Trigger folder: Sent Items
  • Folder Path (Create file step): /Outlook/outbox

eml-mcp will tag these emails as outbox.

CLI

eml <command> [<email-directory>] [--data-path=<path>]

Options

Flag Description
--data-path=<path> Base data directory (default: ~/.eml)

Development build

npm install
npm run build   # compiles TypeScript and re-links the eml/eml-mcp bins

Register the local build in Claude Code:

claude mcp add eml node "/absolute/path/to/eml-mcp/dist/server.js" -- "/path/to/emails" --from=you@example.com