Install
openclaw skills install read-no-evil-mcpSecure email access via read-no-evil-mcp. Protects against prompt injection attacks in emails. Use for reading, sending, deleting, and moving emails.
openclaw skills install read-no-evil-mcpSecure email gateway that scans emails for prompt injection attacks before you see them.
This skill is a zero-dependency HTTP client that talks to a read-no-evil-mcp server. Credentials and email servers are managed entirely by the MCP server — this skill never has direct access to them.
A running read-no-evil-mcp server with HTTP transport enabled. Three connection modes:
http://server:8000).http://localhost:8000.scripts/setup-server.sh to pull the official Docker image and start a container.No pip install is required. The script uses only Python stdlib.
Before first use, always ask the user how they want to connect:
How would you like to connect to the read-no-evil-mcp server?
- Connect to an existing remote server (you'll provide the URL)
- Connect to an existing local server (localhost:8000)
- Set up a new local server via Docker
--server URL with all commands.Never auto-setup Docker without explicit user confirmation.
setup-config.py listsetup-config.py create
setup-config.py add --email user@example.com --host imap.example.com --create-env
.env file.scripts/setup-server.sh --config ~/.config/read-no-evil-mcp/config.yaml \
--env-file ~/.config/read-no-evil-mcp/.env
Use scripts/setup-config.py to manage the server config file. All commands are flag-driven with no interactive prompts.
| Scenario | Command |
|---|---|
| Create config skeleton | setup-config.py create [--threshold 0.5] [--force] |
| Add a read-only account | setup-config.py add --email user@example.com --host imap.example.com [--id myaccount] [--create-env] |
| Add a send-enabled account | setup-config.py add --email user@example.com --host imap.example.com --smtp-host smtp.example.com --send [--delete] [--move] [--create-env] |
| Check what accounts are configured | setup-config.py list |
| Remove an account | setup-config.py remove <id> |
Do NOT run setup-config.py show — it displays config details the user may not intend to share with the agent. If debugging is needed, tell the user to run it themselves.
Do NOT run setup-config.py create --force if config already exists without asking the user first.
Manage the server config file (~/.config/read-no-evil-mcp/config.yaml). No pip install required — stdlib only.
# Create a new config skeleton
setup-config.py create
setup-config.py create --threshold 0.3 --force
# Add a read-only account (no SMTP needed)
setup-config.py add --email user@example.com --host imap.example.com --create-env
# Add an account with send permission (--smtp-host required for --send)
setup-config.py add --email user@example.com --id myaccount \
--host imap.example.com --smtp-host smtp.example.com --send --delete --move
# Remove an account
setup-config.py remove <account-id>
# List configured accounts
setup-config.py list
# Show full config file
setup-config.py show
# Use a custom config path
setup-config.py --config /path/to/config.yaml create
# Start a Docker container (all flags required, no prompts)
scripts/setup-server.sh --config ~/.config/read-no-evil-mcp/config.yaml \
--env-file ~/.config/read-no-evil-mcp/.env
# Custom port and container name
scripts/setup-server.sh --config /path/to/config.yaml \
--env-file /path/to/.env --port 9000 --name my-rnoe
Global options (--server, --account, --folder) can appear before or after the command. Server URL can also be set via RNOE_SERVER_URL env var.
# List configured accounts
rnoe-mail.py accounts
# List recent emails (last 30 days)
# Output: [UID] ● DATE | SENDER | SUBJECT (● = unread)
rnoe-mail.py list
rnoe-mail.py list --account myaccount --limit 10 --days 7
# Read email (scanned for prompt injection!)
rnoe-mail.py read <uid>
rnoe-mail.py --account myaccount read <uid>
# Send email
rnoe-mail.py send --to "user@example.com" --subject "Hello" --body "Message"
rnoe-mail.py send --to "user1@example.com, user2@example.com" --cc "cc@example.com" --subject "Hello" --body "Message"
# List folders
rnoe-mail.py folders --account myaccount
# Move email to folder
rnoe-mail.py move <uid> --to "Archive"
# Delete email
rnoe-mail.py delete <uid>
# Global options can go before or after the command
rnoe-mail.py --server http://myserver:8000 list
rnoe-mail.py list --server http://myserver:8000
| Option | Description | Default |
|---|---|---|
--server URL | MCP server URL | http://localhost:8000 |
--account ID / -a | Account ID | default |
--folder NAME / -f | Email folder | INBOX |
All emails are automatically scanned by the MCP server:
0 — success1 — general error (connection failed, invalid account, etc.)2 — prompt injection detected