Skip to main content

mu-mcp: MCP Server for the mu Mail Indexer

PyPI Python GitHub release MCP GitHub license

A Model Context Protocol (MCP) server for querying your local mu mail index. This server enables fast, structured mail search from Claude Desktop and other MCP clients.

Features

  • Stdio MCP server for easy integration
  • Tools: search_emails, view_emails (HTML-only emails converted to text), view_thread (reads a conversation from one message), find_contacts (resolves names to email addresses), list_attachments, open_attachment (saves to a temp dir and optionally opens with the default OS viewer), and mu_help for the full mu reference on demand.
  • Small context footprint: a short query guide lives in the tool description; the full man pages are only loaded when the model asks for them.
  • Fast, flexible mail search using the mu index
  • Claude Desktop ready: simple installation and config
  • Python, uv, and MCP SDK based

Installation

Requires mu installed and your mail indexed (mu init + mu index).

With uv installed, run the published package from PyPI without cloning the repository:

uvx mu-mcp

Usage

Run the MCP Server

uvx mu-mcp

The server communicates over stdio; normally your MCP client launches it using the configuration below.

Claude Desktop Integration

Add to your claude_desktop_config.json:

"mcpServers": {
  "email": {
    "command": "uvx",
    "args": ["mu-mcp"]
  }
}

The client needs uvx and mu on its PATH. If it cannot find uvx, use the absolute path returned by which uvx as the command.

Claude Code Integration

claude mcp add email -s user -- uvx mu-mcp

Use -s local instead to enable it only in the current project. Check it with /mcp in a new session.

Query

Ask Claude to find emails, e.g. "Find emails with a PDF attachment that were sent last April and open the PDF", "Show me the email I received from Alice last week", or "Find emails with the subject 'Meeting Notes'".

To read a conversation, pass any message path from search_emails to view_thread(path). It returns indexed messages oldest first, omits duplicate Message-IDs, and converts HTML-only bodies to text. The defaults are 30 messages and 20,000 characters per message; increase max_results or max_chars if the output is truncated.

Use find_contacts("Alice") to resolve a name before searching. Its pattern is a case-insensitive regular expression matching names or addresses, such as @example\.com$. An empty pattern lists contacts. Results default to 30 contacts; use max_results to change the limit, or personal=True to restrict results to contacts seen in messages involving your personal addresses configured in mu.

Development

To run from a local checkout:

git clone https://github.com/danielfleischer/mu-mcp.git
cd mu-mcp
uv sync
uv run mu-mcp
  • Adding a tool to view an email.
  • Adding a tool to find and download attachments.
  • Progressive disclosure of the mu man pages via mu_help.
  • Add a mu-mcp console script and use uvx mu-mcp as the install method.
  • Describe when to use the server in its instructions, including email, inbox, messages, receipts, and attachments.
  • view_thread: show a whole conversation from one message.
  • find_contacts via mu cfind, to resolve a name to its addresses.

Run the tests with uv run python -m unittest discover -s tests. Integration tests use an isolated temporary mail index and are skipped if mu is unavailable.

Future ideas

  • Return attachment text (PDF, DOCX) from open_attachment; Claude Desktop can't read the saved file paths.

Metadata

Release files for mu_mcp 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mu_mcp 0.7.0
File Size Uploaded
mu_mcp-0.7.0.tar.gz 31.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mu_mcp 0.7.0
File Interpreter ABI Platform
mu_mcp-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 59.5 kB

Release files / mu_mcp-0.7.0.tar.gz

Download URL mu_mcp-0.7.0.tar.gz
Size 31.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b36915dc760842742babb6278a13a3dc7fe38c9fbb4e5a7b25c0b20771031a46
BLAKE2b-256 checksum
How to use checksums
81e9154f332ab9e5221b14dd1db4b2555c30d07661d41e69b419aea30f09b067
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / mu_mcp-0.7.0-py3-none-any.whl

Download URL mu_mcp-0.7.0-py3-none-any.whl
Size 28.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f6fe0ad8f6b56e8e2395519d15eb78c5366c706e7af1d88032a943bf8271cf5d
BLAKE2b-256 checksum
How to use checksums
f62131bc0b2b5c388aa63e576117894e4bb9278c72aedcaa14b28778f301e5e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.1

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page