npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

eml-mcp

v2.2.0

Published

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, s

Readme

eml-mcp

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 terminal dashboard (eml) and a CLI (eml-cli) 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

Installation

npm install -g eml-mcp

Or run directly with npx:

npx eml-mcp /path/to/emails [email protected]

MCP Server

eml-mcp <email-directory> [--from=<address>] [--data-path=<path>]

Add to your MCP client

claude mcp add eml -- npx -y eml-mcp /path/to/emails [email protected]

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

{
  "mcpServers": {
    "eml": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/eml-mcp/dist/server.js", "/path/to/emails", "[email protected]"]
    }
  }
}

Add to ~/.codex/config.toml:

[mcp_servers.eml]
command = "npx"
args = ["-y", "eml-mcp", "/path/to/emails", "[email protected]"]

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.

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.

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.


Tools

| Tool | Description | |---|---| | search_emails | Full-text search with filters (from, date, attachments, folder…) | | get_email | Parse and return a single email | | compose_email | Create a new draft .eml and open it | | update_email | Modify an existing draft and re-open it | | open_email | Open an existing .eml in the default mail client (works for inbox, outbox, and drafts) | | delete_email | Permanently delete an .eml file and remove it from the index | | extract_attachments | Save one or all attachments from an email to a directory | | open_attachment | Open an attachment with the system default application | | search_attachments | Find emails containing attachments by filename, type, or keyword | | refresh_index | Incrementally sync the index with disk state (add new, remove deleted, update changed) |

Terminal Dashboard (TUI)

eml [--data-path=<path>]

Opens an interactive terminal dashboard that watches your email index and runs configured workflows automatically. Panels show active workflows and a live activity log.

The --data-path flag sets the base data directory (default: ~/.eml). The MCP server must have been started at least once to create the config file — or pass the email directory explicitly via --data-path.

CLI

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

| Command | Description | |---|---| | refresh_index | Sync the index with disk (add new, remove deleted, update changed) | | stats | Show file counts on disk vs indexed per folder; flags duplicates | | last-indexed | Show when the index was last updated |

The email directory argument is optional if the MCP server has run at least once (it saves the path to ~/.eml/config.json).

Options

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

Examples

# Refresh the index
eml-cli refresh_index

# Check for duplicates or missing files
eml-cli stats

# Use a custom data directory
eml-cli stats --data-path=/custom/path

Development build

npm install
npm run build   # compiles TypeScript and re-links the eml/eml-cli/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" [email protected]