mcp-email-server@1.14.0
VERIFIED· not startedPublisher claims: "Full-featured, multi-account MCP email server for Windows, macOS, and Linux—read, search, organize, and send email via IMAP and SMTP." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
MCP_EMAIL_SERVER_CREDENTIAL_STORAGEMCP_EMAIL_SERVER_IMAP_PASSWORDMCP_EMAIL_SERVER_PASSWORDMCP_EMAIL_SERVER_SMTP_PASSWORDConfiguration, not credentials: LOGURU_LEVEL, MCP_ALLOWED_HOSTS, MCP_ALLOWED_ORIGINS, MCP_EMAIL_SERVER_ACCOUNT_ALLOWED_MUTATIONS, MCP_EMAIL_SERVER_ACCOUNT_NAME, MCP_EMAIL_SERVER_ALLOW_PROTOCOL_COMMANDS, MCP_EMAIL_SERVER_ALLOWED_MUTATIONS, MCP_EMAIL_SERVER_ALLOWED_RECIPIENTS, MCP_EMAIL_SERVER_ALLOWED_SENDERS, MCP_EMAIL_SERVER_CONFIG_PATH, MCP_EMAIL_SERVER_DRAFTS_MAILBOX, MCP_EMAIL_SERVER_EMAIL_ADDRESS, MCP_EMAIL_SERVER_ENABLE_ATTACHMENT_CONTENT, MCP_EMAIL_SERVER_ENABLE_ATTACHMENT_DOWNLOAD, MCP_EMAIL_SERVER_FULL_NAME, MCP_EMAIL_SERVER_IMAP_HOST, MCP_EMAIL_SERVER_IMAP_NON_ASCII_SEARCH, MCP_EMAIL_SERVER_IMAP_PORT, MCP_EMAIL_SERVER_IMAP_SEARCH_MODE, MCP_EMAIL_SERVER_IMAP_SSL, MCP_EMAIL_SERVER_IMAP_START_SSL, MCP_EMAIL_SERVER_IMAP_USER_NAME, MCP_EMAIL_SERVER_IMAP_VERIFY_SSL, MCP_EMAIL_SERVER_LOG_LEVEL, MCP_EMAIL_SERVER_REPORT_BLOCKED_MUTATIONS, MCP_EMAIL_SERVER_SAVE_TO_SENT, MCP_EMAIL_SERVER_SENT_FOLDER_NAME, MCP_EMAIL_SERVER_SMTP_HOST, MCP_EMAIL_SERVER_SMTP_PORT, MCP_EMAIL_SERVER_SMTP_SSL, MCP_EMAIL_SERVER_SMTP_START_SSL, MCP_EMAIL_SERVER_SMTP_USER_NAME, MCP_EMAIL_SERVER_SMTP_VERIFY_SSL, MCP_EMAIL_SERVER_USER_NAME, MCP_ENABLE_DNS_REBINDING_PROTECTION, MCP_HOST- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard. It asks for MCP_EMAIL_SERVER_CREDENTIAL_STORAGE, MCP_EMAIL_SERVER_IMAP_PASSWORD, MCP_EMAIL_SERVER_PASSWORD, MCP_EMAIL_SERVER_SMTP_PASSWORD and talks to its vendor. Give the credential to the guard, not the server: the value never enters the server's environment and only travels to the host you bind. What the tools do with a real credential was not observed.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-13 and scored it 84/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
subprocess.run([npm, "run", "build"], cwd=FRONTEND, check=True) # noqa: S603 - maintainer toolFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.subprocess.run([npm, "ci"], cwd=FRONTEND, check=True) # noqa: S603 - maintainer toolFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."/app/.env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.expect(second?.[1]?.credentials).toBe('same-origin')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run([npm, "run", "check"], cwd=FRONTEND, check=True) # noqa: S603 - maintainer toolFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.run: cd frontend && npx playwright install --with-deps chromiumFix: Pin versions and sources; vendor anything fetched at install time.process = subprocess.run( # noqa: S603 - fixed Docker executable with maintainer-supplied image tagFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.url: https://mcp-email-server.wh1isper.topFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.redirected = subprocess.run( # noqa: S603 - exact test-owned executable and argumentsFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run( # noqa: S603 - controlled test commandFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.initialized = subprocess.run( # noqa: S603 - exact test-owned executable and argumentsFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.site_url: https://mcp-email-server.wh1isper.topFix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.# chmod fails). Instead: write to a same-directory temp file that is 0600Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.process = subprocess.Popen( # noqa: S603 - exact test-owned executable and argumentsFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.users off to interactive CLI/UI and never collect or relay credentials.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run( # noqa: S603 - controlled test commandFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Documentation = "https://mcp-email-server.wh1isper.top/"Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.process = subprocess.Popen( # noqa: S603 - exact test-owned executable and argumentsFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.devnull = subprocess.run( # noqa: S603 - exact test-owned executable and argumentsFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run( # noqa: S603 - fixed interpreter and repository scriptFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.completed = subprocess.run( # noqa: S603 - exact test-owned plugin executableFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Homepage = "https://mcp-email-server.wh1isper.top/"Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.subprocess.run( # noqa: S603 - controlled test commandFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for mcp-email-server@1.14.0 as of 7d ago. This is the package itself, not its dependencies.