Skip to main content
Glama
weirdapps

sch-mail

by weirdapps

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SCH_MAIL_ALLOWED_DIRSNoReplaces the default allowed folders for attachments. Absolute paths separated by os.pathsep (`:` on macOS and Linux). `~` is expanded and relative entries are ignored.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
sch_list_foldersA

List all mailbox folders.

Returns folder names available in the sch.gr mailbox. Pass account (a key in credentials.json, e.g. "work") to pick a mailbox, or omit it for the account named by "default" in that file.

sch_list_mailA

List recent messages with subject, sender, date, and attachment indicators.

Each result's "id" is the message's IMAP UID: stable across calls, unlike a sequence number, and the value every msg_id parameter expects.

Args: folder: Mailbox folder (default: INBOX) top: Max messages to return (default: 20, max: 100) since: Only messages after this date (YYYY-MM-DD). Default: last 30 days. account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_get_mailA

Read a specific message by UID (the "id" from sch_list_mail or sch_search_mail).

Args: msg_id: Message UID from sch_list_mail / sch_search_mail folder: Mailbox folder (default: INBOX) body: Body format: "text" (plain text, default), "html", or "none" max_body_chars: Truncate body to this many chars (default: 5000) account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_search_mailA

Search messages by keyword in subject, sender, or body.

Result ids are IMAP UIDs, the same ids sch_list_mail returns.

Args: query: Search text (case-insensitive) folder: Mailbox folder (default: INBOX) field: Where to search: "subject", "from", "body", or "all" (default: subject) since: Only search after this date (YYYY-MM-DD) top: Max results (default: 20) account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_download_attachmentsA

Download attachments from a message to disk.

Args: msg_id: Message UID from sch_list_mail / sch_search_mail folder: Mailbox folder (default: INBOX) out_dir: Directory to save files (default: ~/Downloads). Must lie inside the allowed folders (by default ~/Downloads and the temp dirs; SCH_MAIL_ALLOWED_DIRS replaces them). filename_filter: Only download files matching this substring (case-insensitive) account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_mail_statsB

Quick mailbox statistics: total messages, recent/unseen counts, date range.

Args: folder: Mailbox folder (default: INBOX) account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_send_mailA

Send a new email via SMTP, or save as draft (default).

Args: to: Recipient(s), comma-separated (e.g. "a@x.gr,b@y.gr") subject: Subject line body: Email body (plain text by default; set html=True for HTML) cc: CC recipient(s), comma-separated bcc: BCC recipient(s), comma-separated html: True if body is HTML; False (default) for plain text attachments: List of absolute file paths to attach. Each must be an existing file inside the allowed folders (by default ~/Downloads and the temp dirs; SCH_MAIL_ALLOWED_DIRS replaces them). One that is missing or outside them fails the whole call, so nothing is saved or sent without it. send_now: True to dispatch via SMTP immediately. Default False = save to Drafts folder. account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

Returns dict with status ("draft_saved" or "sent"), folder/recipients, and message id.

sch_forward_mailA

Forward an existing message to new recipient(s), preserving attachments.

Args: msg_id: Source message UID (from sch_list_mail / sch_search_mail) to: Recipient(s), comma-separated cc: CC recipient(s) bcc: BCC recipient(s) additional_text: Optional text prepended above the forwarded content (plain text) folder: Source folder (default: INBOX) send_now: True to dispatch immediately. Default False = save to Drafts. account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

Returns status, subject, attachment count, and message id.

sch_move_mailA

Move one message, addressed by UID, from source_folder to dest_folder.

Uses UID MOVE when the server supports it, else UID COPY + \Deleted + UID EXPUNGE, and a bare EXPUNGE only on a server with neither MOVE nor UIDPLUS. Destination folder must already exist (use sch_create_folder first if needed).

Args: msg_id: Source message UID from sch_list_mail / sch_search_mail (one UID; ranges and lists are refused) dest_folder: Target folder name source_folder: Source folder (default: INBOX) account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

sch_create_folderA

Create a new mailbox folder.

Args: name: Folder name. For nested folders use the server's separator (commonly "/" or ".", e.g. "INBOX/Archive2026" or "Archive.2026"). subscribe: Subscribe to the folder so it appears in mail clients (default: True). account: Account key in credentials.json (e.g. "personal" or "work"). Default: the account named by "default" in that file.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct action on the mail domain: listing, searching, reading, sending, forwarding, moving, downloading attachments, folder listing/creation, and stats. The closest pair (sch_list_mail vs sch_search_mail) is clearly separated as browse-vs-query, and both share the same UID semantics, so there is no realistic misselection.

Naming Consistency4/5

The set follows a consistent sch_<verb>_<noun> pattern (sch_list_mail, sch_get_mail, sch_send_mail, sch_move_mail, sch_create_folder). The only deviation is sch_mail_stats, which puts the noun before the description rather than using a verb, but it remains readable.

Tool Count5/5

Ten tools is a well-scoped size for an email client surface, covering reading, sending, organizing, and attachments without bloat. Every tool earns its place and none appears redundant.

Completeness3/5

Core lifecycle is covered (list, search, read, send, forward, move, create folder, attachments, stats), but notable operations are missing: no delete_mail or delete/rename folder, and no reply or mark read/unread. These are common email workflows whose absence forces agents to work around dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues