Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

owlpost

PYPI · OWLPOST · 2 COMPONENTS

IMAP/SMTP email for iCloud, Gmail, Proton Bridge and more: search, read, follow threads, send.

62 Trust /100

Last scanned (7 hours ago)

Scores higher than 62% of PyPI servers

Category Communication

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 28 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to smankoo/owlpost). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 4 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability63
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 2858 tokens (~190/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (40% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 20 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 19 Oct 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Analysed pypi/owlpost@0.2.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo smankoo/owlpost
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/smankoo/owlpost/.github/workflows/release.yml@refs/tags/v0.2.0
Rekor log index 3314207402
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:f2e51060b8291dc019a2266aefcb884f6e834b57480ab94a9e1f07ee942f5886

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 28 packages
Packages resolved 28
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 15 exposed · ~2,751 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
delete_email ~125

Delete a message by moving it to the account's Trash folder. The Trash folder is discovered via SPECIAL-USE (e.g. "Deleted Messages" on iCloud, "[Gmail]/Trash" on Gmail). The message is not permanently expunged from Trash, so it can still be recovered from the mail client. Args: account: Account name from list_accounts. folder: Folder the message is currently in. uid: Message UID in that folder.

NameTypeReqDescription
accountstringyes–
folderstringyes–
uidstringyes–

No output schema declared.

No examples provided.

flag_message ~95

Flag (star) or unflag a message by setting or clearing its \Flagged flag. Args: account: Account name from list_accounts. folder: Folder containing the message. uid: Message UID. flagged: True to flag (default), false to remove the flag.

NameTypeReqDescription
accountstringyes–
flaggedboolean––
folderstringyes–
uidstringyes–

No output schema declared.

No examples provided.

forward_email ~220

Forward a message to new recipients and send it immediately; confirm with the user first. The subject gets a "Fwd:" prefix, the original headers and plain-text body are included below your note, and the original attachments are re-attached unless include_attachments is false. Args: account: Account name from list_accounts. folder: Folder containing the message to forward. uid: UID of the message to forward. to: Recipient email addresses. body: Optional note placed above the forwarded content. cc: Cc recipient addresses. bcc: Bcc recipient addresses. attachments: Extra local file paths to attach. include_attachments: Re-attach the original message's attachments (default true).

NameTypeReqDescription
accountstringyes–
attachments–––
bcc–––
bodystring––
cc–––
folderstringyes–
include_attachmentsboolean––
toarrayyes–
uidstringyes–

No output schema declared.

No examples provided.

get_conversation ~191

Return every message in the same conversation as a given message, oldest first. On Gmail this uses the X-GM-THRID thread id across All Mail. Elsewhere it follows the Message-ID / In-Reply-To / References graph across the inbox, sent, archive, all-mail and drafts folders, so your own replies are included. Returns envelopes (no bodies); use read_email for content. Identify the seed message with either `message_id`, or `folder` + `uid`. Args: account: Account name from list_accounts. message_id: Message-ID header of any message in the thread, including angle brackets. folder: Folder of the seed message (used with uid). uid: UID of the seed message (used with folder).

NameTypeReqDescription
accountstringyes–
folder–––
message_id–––
uid–––
NameTypeReqDescription
resultarrayyes–

No examples provided.

list_accounts ~93

List the mail accounts configured in owlpost's accounts.toml. Returns one entry per account with its `name` (the value to pass as `account` to every other tool), email address, provider (icloud, gmail or generic), IMAP/SMTP hostnames and whether sent mail is auto-saved. Passwords and password sources are never included. Takes no arguments and does not contact any mail server.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultarrayyes–

No examples provided.

list_folders ~109

List every IMAP folder (mailbox) in an account. Each entry has the folder `name` to use in other tools, its raw IMAP flags, the hierarchy delimiter, and a detected `role` (inbox, sent, trash, drafts, junk, archive, all, flagged, important) based on RFC 6154 SPECIAL-USE flags, or null for ordinary folders. Args: account: Account name from list_accounts.

NameTypeReqDescription
accountstringyes–
NameTypeReqDescription
resultarrayyes–

No examples provided.

mark_read ~92

Mark a message as read or unread by setting or clearing its \Seen flag. Args: account: Account name from list_accounts. folder: Folder containing the message. uid: Message UID. read: True to mark read (default), false to mark unread.

NameTypeReqDescription
accountstringyes–
folderstringyes–
readboolean––
uidstringyes–

No output schema declared.

No examples provided.

move_email ~137

Move a message from one folder to another. Uses IMAP MOVE when the server supports it, otherwise COPY followed by flagging the original \Deleted and EXPUNGE. The message gets a new UID in the destination folder, so the old uid is no longer valid afterwards. Args: account: Account name from list_accounts. folder: Folder the message is currently in. uid: Message UID in that folder. dest_folder: Destination folder name (see list_folders).

NameTypeReqDescription
accountstringyes–
dest_folderstringyes–
folderstringyes–
uidstringyes–

No output schema declared.

No examples provided.

read_email ~232

Read one message: decoded headers, body and attachment list, without marking it read. By default only the plain-text body is returned, truncated at 50,000 characters to fit MCP result limits; the untruncated sizes are always reported as text_full_length and html_full_length. Attachments are listed with a 1-based `part` index for save_attachment. Threading headers (message_id, in_reply_to, references) are included. Args: account: Account name from list_accounts. folder: Folder containing the message. uid: Message UID from search_messages. include_html: Also return the HTML body (default false). HTML mail can be very large. include_text: Return the plain-text body (default true). body_max_chars: Truncate each body to this many characters (default 50000).

NameTypeReqDescription
accountstringyes–
body_max_charsinteger––
folderstringyes–
include_htmlboolean––
include_textboolean––
uidstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

reply_email ~211

Reply to a message and send the reply immediately; confirm with the user first. Addresses the reply to the original sender (plus the original To/Cc, minus your own address, when reply_all is true), prefixes the subject with "Re:" if needed, sets In-Reply-To and References so clients thread it correctly, and quotes the original plain-text body below yours. Args: account: Account name from list_accounts. folder: Folder containing the message being answered. uid: UID of the message being answered. body: Your reply text; the quoted original is appended after it. reply_all: Also reply to the original To and Cc recipients. html: Optional HTML alternative for the reply. attachments: Local file paths to attach.

NameTypeReqDescription
accountstringyes–
attachments–––
bodystringyes–
folderstringyes–
html–––
reply_allboolean––
uidstringyes–

No output schema declared.

No examples provided.

resolve_folder ~122

Resolve a special-use role to the provider-specific folder name. For example "sent" becomes "Sent Messages" on iCloud and "[Gmail]/Sent Mail" on Gmail. Uses SPECIAL-USE flags first and falls back to common folder names. Returns null if no matching folder exists. Args: account: Account name from list_accounts. role: One of inbox, sent, trash, drafts, junk, archive, all, flagged or important (case-insensitive).

NameTypeReqDescription
accountstringyes–
rolestringyes–
NameTypeReqDescription
result–yes–

No examples provided.

save_attachment ~187

Download one attachment from a message and write it to the local filesystem. The mailbox is not modified. Returns the written path, size, MIME type and original filename. An existing file at the target path is overwritten. Args: account: Account name from list_accounts. folder: Folder containing the message. uid: Message UID. part: 1-based part index from read_email's `attachments` list. save_to: Destination. A directory (trailing slash, existing directory, or a path without an extension) keeps the original filename; anything else is used as the full file path. `~` is expanded and missing directories are created.

NameTypeReqDescription
accountstringyes–
folderstringyes–
partintegeryes–
save_tostringyes–
uidstringyes–

No output schema declared.

No examples provided.

save_draft_email ~244

Compose an email and save it to the account's Drafts folder without sending it. The message is appended to the special-use Drafts folder with the \Draft flag, so the user can review, edit and send it from their own mail client. Use this instead of send_email whenever the user wants to check a message first. Each call creates a new draft. Args: account: Account name from list_accounts. to: Recipient email addresses. subject: Subject line. body: Plain-text body. cc: Cc recipient addresses. bcc: Bcc recipient addresses. html: Optional HTML alternative to the plain-text body. attachments: Local file paths to attach. in_reply_to: Message-ID this draft replies to, for threading. references: Message-IDs of earlier messages in the thread.

NameTypeReqDescription
accountstringyes–
attachments–––
bcc–––
bodystringyes–
cc–––
html–––
in_reply_to–––
references–––
subjectstringyes–
toarrayyes–

No output schema declared.

No examples provided.

search_messages ~418

Search one folder with structured filters and return message envelopes, newest first. All filters are combined with AND. String filters use IMAP case-insensitive substring matching; multi-word values are quoted for you. Each result has uid, folder, message_id, subject, from/to/cc, date, flags, size, seen and flagged; pass folder + uid to read_email for the body. The folder is opened read-only, so searching never marks mail read. Args: account: Account name from list_accounts. folder: Folder to search (default "INBOX"); use list_folders or resolve_folder for others. from_: Substring of the From header (name or address). to: Substring of the To header. cc: Substring of the Cc header. subject: Substring of the Subject. body: Substring of the message body. text: Substring of headers or body. since: Only messages on or after this date (YYYY-MM-DD). before: Only messages before this date (YYYY-MM-DD). unseen: Only unread messages. seen: Only read messages. flagged: Only flagged/starred messages. has_attachment: Best-effort filter for messages with attachments (multipart/mixed or an attachment disposition header). raw: A raw IMAP SEARCH string, e.g. 'OR FROM "alice" FROM "bob"'. When set, every other filter is ignored. limit: Maximum number of results (default 50).

NameTypeReqDescription
accountstringyes–
before–––
body–––
cc–––
flaggedboolean––
folderstring––
from_–––
has_attachmentboolean––
limitinteger––
raw–––
seenboolean––
since–––
subject–––
text–––
to–––
unseenboolean––
NameTypeReqDescription
resultarrayyes–

No examples provided.

send_email ~275

Send a new email over SMTP immediately; this cannot be undone, so confirm with the user first. When the account has auto_save_sent enabled (needed for iCloud, whose SMTP does not keep a copy) the message is also appended to the Sent folder. Returns the generated Message-ID, recipients and the folder the copy was saved to (null if none). To answer an existing message prefer reply_email, which fills in recipients and threading for you. Args: account: Account name from list_accounts; mail is sent from its address. to: Recipient email addresses. subject: Subject line. body: Plain-text body. cc: Cc recipient addresses. bcc: Bcc recipient addresses (delivered but never written to headers). html: Optional HTML alternative to the plain-text body. attachments: Local file paths to attach. in_reply_to: Message-ID this message replies to, for threading. references: Message-IDs of earlier messages in the thread.

NameTypeReqDescription
accountstringyes–
attachments–––
bcc–––
bodystringyes–
cc–––
html–––
in_reply_to–––
references–––
subjectstringyes–
toarrayyes–

No output schema declared.

No examples provided.

Install

How do I install the owlpost MCP server?

owlpost runs locally as a PyPI package, launched with uvx owlpost. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · owlpost

# add to Claude Code
claude mcp add smankoo-owlpost -- uvx owlpost
Common questions

What is the owlpost MCP server?

owlpost is an MCP server listed in the public MCP registry as io.github.smankoo/owlpost. IMAP/SMTP email for iCloud, Gmail, Proton Bridge and more: search, read, follow threads, send. This page covers its PyPI package (owlpost).

Is the owlpost MCP server safe to use?

owlpost scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the owlpost MCP server expose?

owlpost exposes 15 tools: list_accounts, list_folders, resolve_folder, search_messages, read_email, and 10 more. Their descriptions and schemas cost roughly 2,751 tokens of context every time the server is loaded.

Is the owlpost MCP server still maintained?

owlpost is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the owlpost MCP server under?

owlpost declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.