mu-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mu-mcpfind my most recent emails from Alice"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mu-mcp
An MCP server that lets your local LLM search your email using mu.
Privacy
Your emails never leave your machine.
mu indexes your local maildir and searches it entirely on-device — no email content is sent to any server. When paired with a local LLM such as Qwen, Mistral, or Llama running via Ollama, the full pipeline is local:
your emails → mu index (local) → mu-mcp → local LLMNothing touches the internet. This is in contrast to cloud-based email AI integrations that require granting third-party services access to your inbox.
If you use a cloud LLM (e.g. Claude, GPT-4), be aware that email metadata — subjects, sender addresses, dates, and full message bodies if you invoke get_email — will be sent to that provider as part of the conversation context.
Related MCP server: notmuchproxy
Requirements
Installation
git clone ...
cd mu-mcp
uv syncMCP client configuration
{
"mcpServers": {
"mu": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/mu-mcp",
"mu-mcp"
]
}
}
}Tools
search_emails(query, max_results, sort_field, sort_order)
Search your maildir using mu query syntax. Returns email metadata (subject, sender, date, path, flags).
get_email(path)
Retrieve the full content of a message by its file path (as returned by search_emails). Returns headers and body as plain text.
Available Tools
5 toolscount_emailsA
Count emails matching a query without fetching their content.
Use this when the user asks 'how many emails' rather than asking to see them.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that counting happens without fetching content, but lacks details on query validation, performance, or limits. Adequate for a simple count tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no extraneous information. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (not shown), description might be sufficient for a simple count. However, it does not mention return format or edge cases, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'query' has no schema description and zero schema coverage. The description does not explain query format or syntax, so adds minimal meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Count' and resource 'emails', and distinguishes from siblings like 'search_emails' by specifying it does not fetch content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to use when the user asks 'how many emails' rather than to see them, providing clear context. No explicit when-not, but implied by contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_contactsA
Search contacts by name or email address using mu cfind.
Use this to resolve a person's name to their exact email address before searching emails with from: or to: filters.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. Only states basic behavior (search by name/email) and references 'mu cfind'. Lacks details on matching behavior, case sensitivity, performance, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. Front-loaded with the core action and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with output schema present. Description covers essential use case and query method, but lacks details on result format or limitations. Still adequate given context signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description explains the 'query' parameter (name or email) but does not clarify 'max_results' beyond default value. Incomplete for a tool with two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Search', the resource 'contacts', and the method 'by name or email address'. It also distinguishes from sibling tools (all email-related) by focusing on resolving names to emails before email search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'before searching emails with from: or to: filters'. Does not specify when not to use or provide alternatives, but the context is clear given sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailA
Get the full content of an email by its file path.
The path is obtained from the path field of search_emails results.
Returns the raw email text including headers and body.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It states the output is raw email text including headers and body, but does not disclose potential restrictions (e.g., account access) or side effects. It is a read operation, so acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action. No wasted words, efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown), the description covers return type. Sibling tools are differentiated. The tool is simple, and the description is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description explains the 'path' parameter as a file path from search_emails results, adding meaning. It does not specify format or constraints, but for a single string parameter this is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the full content of an email by file path, distinguishing it from siblings like search_emails which return metadata. The verb 'get' and resource 'email' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use: obtain path from search_emails results. It implies a dependency on search_emails, but does not explicitly state when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesA
List all maildirs in the mu index.
Call this first to discover maildir names before using maildir: in queries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a safe read-only operation. It doesn't detail return format or performance, but the output schema exists and the tool is simple.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, and the key instruction is front-loaded. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema, the description is fully sufficient. It explains the tool's purpose and its place in the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds context on why the tool is useful, which is adequate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'maildirs in the mu index', distinguishing it from sibling tools which count emails, find contacts, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this first to discover maildir names before using 'maildir:' in queries, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsB
Search emails using mu find query syntax.
Examples: 'from:alice subject:report date:2w..'
sort_field: one of date, from, to, subject, size, maildir (default: date) sort_order: "desc" for newest/largest first, "asc" for oldest/smallest first
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| sort_field | No | date | |
| sort_order | No | desc | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must convey behavioral traits. It mentions query syntax and sort options, but fails to disclose key details such as whether the tool is read-only, pagination behavior, authentication needs, or what happens if max_results is exceeded. The destructive/read-only nature is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with minimal waste. It starts with the main purpose and immediately provides examples and parameter details. Front-loaded, but could be slightly more structured for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and an existing output schema, the description covers query syntax and sort options but misses max_results. No guidance on result format or pagination, though output schema may partially compensate. Overlooks usage context relative to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains sort_field and sort_order with defaults and valid values, and gives examples for the query parameter. However, max_results is not mentioned at all, leaving one of four parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search emails using mu find query syntax', which is a specific verb+resource. The tool name search_emails is distinct from siblings like count_emails, get_email, find_contacts, and list_mailboxes, so purpose is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and explains sort fields/order, implying usage, but does not explicitly state when to use this tool versus alternatives like get_email or count_emails. No 'when not to use' guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
count_emails - First observed
find_contacts - First observed
get_email - First observed
list_mailboxes - First observed
search_emails
TDQS
Each tool has a unique and clearly defined purpose: counting emails, finding contacts, fetching full email content, listing mailboxes, and searching emails. No overlap in functionality.
All tool names follow a consistent verb_noun pattern (e.g., count_emails, find_contacts, get_email), all in lowercase snake_case. The naming is predictable and clear.
With 5 tools covering core email operations (search, count, retrieve, list mailboxes, find contacts), the number is well-scoped and each tool serves a necessary role.
The set covers the main query and retrieval needs, but lacks operations like deleting or moving emails. For a read-oriented MCP, it's mostly complete; minor gap for listing all contacts without a query.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Stateful email for AI agents — read inboxes, reply in-thread, draft with approval.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceGive your AI tools access to your email. Search, read, send, and manage messages across multiple accounts without leaving your terminal.1147MIT
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to search and read email from a notmuch archive, providing tools for searching threads, retrieving messages, and listing tags through an MCP endpoint.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage multiple email accounts with secure credentials, local full-text search, thread-aware replies, and automation.23MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to query and recall your entire Gmail inbox locally, providing fast summarization and semantic search without relying on Gmail's search API.1074MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ration/mu-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server