pylos-mcp
Email MCP server for Gmail, Outlook and any IMAP mailbox, hardened against prompt injection
Install / Use
claude mcp add adamVass -- npx -y github:adamVass/pylos-mcpIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
SecuritySupported Platforms
Our assessment of pylos-mcp
pylos-mcp scores 80/100 on our quality scale, 1019th of 1,118 Security skills we index.
Its MCP Server is 19 KB long, well organised into 9 sections with 4 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 2 days ago, so pylos-mcp is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
pylos-mcp compared with similar skills
All 4 of these similar skills score higher than pylos-mcp; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| pylos-mcp (this skill)by adamVass | 80 | 3 | 2d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 98.8k | 2d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 75.6k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.4k | 1d ago | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 88.4k | today | MCP Server |
Frequently asked questions
- How do I install pylos-mcp?
- Run
claude mcp add adamVass -- npx -y github:adamVass/pylos-mcp. The install tabs above show the steps for each supported agent. - Which AI agents does pylos-mcp work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is pylos-mcp safe to use?
- It is MIT-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is pylos-mcp still maintained?
- The repository was last updated 2 days ago, so pylos-mcp is actively maintained.
Skill content
View source on GitHubAnyone can put text in your inbox, and once an AI assistant reads that inbox, they can put text in front of the assistant too. pylos-mcp lets Claude, or any MCP client, search, read and draft your mail while treating every message as input from a stranger, and it points out what a message is hiding before the assistant acts on it.
Every message is marked as data, with a Warnings line for what looks off, such as hidden text, phrases aimed at an AI, lookalike letters or a failed DMARC check. By default the assistant can read and draft. Moving, sending and deleting stay off until you turn them on, sending then reaches only the addresses you list, and there is no bcc anywhere. It runs on your machine and works with Gmail, Outlook and Microsoft 365, iCloud, Yahoo, GMX, Fastmail, mailbox.org, Posteo, Proton through Bridge, or a server of your own.
pylos-mcp connects to your mail provider, and with Outlook to Microsoft's sign in service. What the assistant reads goes to your AI client and, through it, to the model provider you use, as anything else you show your assistant does. Attachments you ask for are saved to your Downloads folder.
The lethal trifecta
Simon Willison calls it the lethal trifecta: an AI agent with access to private data, exposure to untrusted content and the ability to communicate externally. An assistant reading your email has the first two by design, because your inbox is private and anyone can write to it. Stealing what it read takes the third, a way to send it somewhere else.
Sending is off by default. Drafts wait in your Drafts folder until you send them yourself, and enabling sending still requires a recipient allowlist. With SEND_CONFIRM=true, every message is also shown to you in a dialog and goes out only if you accept. No tool attaches a file from your disk or adds a forwarding rule.
The third leg can still come from elsewhere in the same client, such as a tool that fetches web pages or runs shell commands. Image markup inside a message is neutralized, but the model can still write an image link of its own, which a client that loads images would fetch. When the assistant reads your mail, keep tools that reach the internet out of that conversation.
Fencing reduces prompt injection risk, and nothing eliminates it. The model still reads text written by strangers, so check what the assistant tells you about your mail before acting on it.
Quick start
pylos-mcp works with any client that runs local MCP servers. It runs locally through npx and needs Node.js 22 or later. Every route below starts from example values, so replace the address and password with your own. Use an app password, not your account's regular password, and for Outlook no password at all. Provider setup says where to get one.
Claude Desktop. Download pylos-mcp.mcpb, open it, and fill in the form Desktop shows.
Claude Code. --scope user makes it available in every project. EMAIL_PASSWORD_CMD keeps the password out of your shell history and Claude's config: it runs a command that prints the password, here a macOS keychain lookup. Store the password there first with security add-generic-password -s pylos-mcp -a you@example.com -w, which asks for it.
claude mcp add pylos-mcp --scope user -e PROVIDER=gmail -e EMAIL_USER=you@example.com \
-e EMAIL_PASSWORD_CMD="security find-generic-password -s pylos-mcp -w" -- npx -y pylos-mcp
Cursor and VS Code. Use the buttons above, then put your own values in the config they create.
<details> <summary><b>Config files for Cursor, VS Code, Windsurf, Cline and other clients</b></summary>Most clients, Cursor's .cursor/mcp.json and Claude Desktop's claude_desktop_config.json among them, take this entry:
{
"mcpServers": {
"pylos-mcp": {
"command": "npx",
"args": ["-y", "pylos-mcp"],
"env": {
"PROVIDER": "gmail",
"EMAIL_USER": "you@example.com",
"EMAIL_PASSWORD": "your-app-password"
}
}
}
}
VS Code's .vscode/mcp.json names the key servers:
{
"servers": {
"pylos-mcp": {
"command": "npx",
"args": ["-y", "pylos-mcp"],
"env": {
"PROVIDER": "gmail",
"EMAIL_USER": "you@example.com",
"EMAIL_PASSWORD": "your-app-password"
}
}
}
}
</details>
Outlook and Microsoft 365 take PROVIDER=outlook and no password at all, so remove EMAIL_PASSWORD from the entry, or the server refuses to start. The first time the assistant reads mail, your browser opens Microsoft's sign in page.
Restart your client fully after any change, since tools register only at startup and toggling the server off and on is not always enough. Then ask the assistant to list your mail folders. A list means it works.
If the Claude Desktop extension shows "Server disconnected", the reason is in Desktop's main.log in ~/Library/Logs/Claude on macOS or %APPDATA%\Claude\logs on Windows, on a line starting with pylos-mcp:.
Capabilities
Each capability is a separate switch, and turning one on leaves the others as they are. Reading is always on, drafting starts on, and everything else stays off until you list it in CAPABILITIES. A tier that is off has its tools left out of the tool list entirely, so a model never learns they exist.
| Tier | Default | Tools |
|---|---|---|
| read | always on | search_emails, get_email, get_thread, get_attachment, list_folders |
| drafts | on | create_draft |
| manage | off | move_email, set_flags |
| send | off | send_email |
| delete | off | delete_email |
| sieve-read | off | list_sieve_scripts, get_sieve_script |
Enable more with a list, for example CAPABILITIES=drafts,manage,delete. Moving a message into Trash is a delete by another route, so move_email refuses Trash unless delete is on too.
get_thread lists the conversation a message belongs to, meaning the messages it replies to and the replies that name it or an earlier message, from its own folder, INBOX and Sent. Each message is then read with get_email, which adds its warnings. Both create_draft and send_email take in_reply_to to thread a reply under the original in mail clients. Sending the reply marks the original as answered. With quote_original, the server adds the original below the reply as mail clients do, but only when every recipient was already on the original. Text the original's HTML hid is left out. A message body can be at most 64 kB, quote included.
search_emails pages through results filtered by free text, from, to, subject, since and before dates, or unread and flagged status. get_email shows sent and arrival times, Cc, and Reply-To when it differs from From. With manage on, set_flags marks messages read, unread, flagged or unflagged.
get_attachment saves a file to DOWNLOAD_DIR without reading its contents into the conversation. Saved files are readable only by you, never replace an existing file, and on macOS carry the quarantine flag, so an app among them goes through Gatekeeper before it runs.
What this can never do
These limits are enforced by the server.
- No raw HTML reaches the model. Bodies come from the plain text part when one exists, or are converted to text otherwise. Invisible characters that hide instructions from a reader while staying readable to a model are stripped.
- Bodies, subjects, sender names and Sieve scripts are fenced with markers that are neutralized inside the content, so a message cannot forge its way out. The server writes the lines outside the fence. Any short mailbox value repeated there, such as a folder name, is cleaned and length capped first.
- No
bccfield exists on drafts or sent mail. A bcc recipient gets a full copy while appearing nowhere in the message, which is exactly what an injected email would ask for. - Drafts and sent mail can attach only files already in the mailbox, named by folder, uid and part. No tool takes a file path or attaches anything from your disk.
- Deleting moves a message to Trash. There is no expunge or permanent delete. A server that cannot move messages is refused. What your provider later does with Trash is up to the provider.
- Sieve access stays read only. No tool writes filter rules, which can forward, reply and notify even after you revoke the app password or uninstall this server.
Sending stays closed with send on until SEND_ALLOWLIST names recipients. It accepts single addresses, domains as *@example.com, or * alone for anyone. With no allowlist, the refusal explains how to allow specific recipients or anyone. SEND_CONFIRM=true adds a confirmation dialog before every send, showing the recipients, subject, attachments and the whole message, quote included. It needs a client that supports MCP elicitation, and other clients are refused, so use drafts there. Claude Desktop does not show these dialogs yet (October 2026). Allowing anyone without it lets the assistant write to anyone unasked, the third part of the lethal trifecta. See SECURITY.md for the design notes.
Sus
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
98.8kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
75.6kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.4kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
88.4k🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
