Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OCTOMAIL_DOWNLOAD_DIRNoDirectory for downloaded attachments and exported files. Defaults to ~/.octomail/attachments/<account>/.~/.octomail/attachments/<account>/
OCTOMAIL_ACCOUNTS_FILEYesPath to the accounts.json file containing the configured Gmail accounts, OAuth credentials, and settings.

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": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
gmail_list_accountsA

List configured Gmail account aliases, with their email address and whether they are authorized.

gmail_get_profileC

Get Gmail profile for an account.

gmail_searchA

Search Gmail messages on one account. Results do not include attachment info (fetched with format: metadata, which never populates the MIME parts tree) — use gmail_read_message on a specific message to see its attachments.

gmail_search_manyA

Search Gmail messages across multiple configured accounts. Results are grouped by account. Results do not include attachment info (fetched with format: metadata, which never populates the MIME parts tree) — use gmail_read_message on a specific message to see its attachments.

gmail_read_messageB

Read one Gmail message.

gmail_read_threadB

Read one Gmail thread.

gmail_archiveA

Archive Gmail messages by removing the INBOX label.

gmail_list_labelsB

List Gmail labels for an account.

gmail_apply_labelsA

Add and/or remove labels on Gmail messages. Label names may also be Gmail label IDs. Adding TRASH or SPAM destroys mail after Gmail's 30-day purge, so that requires confirm: true; removing them does not.

gmail_create_labelA

Create a Gmail label. Nest it by using a path name such as "Clients/Acme".

gmail_update_labelA

Rename and/or restyle a Gmail label. Gmail stores hierarchy in the name, so renaming a parent does not rename its children unless renameDescendants is true.

gmail_delete_labelA

Delete a Gmail label. Without confirm: true this only reports what would be lost and changes nothing. Deleting a label does not delete messages, but their categorisation is lost permanently.

gmail_list_filtersA

List Gmail filters for an account, with each filter's criteria rendered as the equivalent search query.

gmail_create_filterA

Create a Gmail filter. Filters only affect mail that arrives after they are created — use gmail_backfill_filter for existing mail. Gmail allows at most one user-defined label per filter. Adding TRASH or SPAM installs a standing rule that destroys future matching mail after Gmail's 30-day purge, so that requires confirm: true; removing them does not.

gmail_delete_filterA

Delete a Gmail filter. Without confirm: true this only reports the filter's full definition and changes nothing. The Gmail API has no filter update — edit by deleting and recreating.

gmail_backfill_filterA

Apply an existing filter's labels to mail already in the mailbox. Dry run by default: reports what would change and modifies nothing until apply is true. The filter's forward action is deliberately ignored. If the filter adds TRASH or SPAM, applying it destroys mail after Gmail's 30-day purge, so apply: true additionally requires confirm: true — the dry run itself is never gated.

gmail_get_attachmentA

Fetch one attachment from a Gmail message. Writes it into the account's download directory and returns the path (encoding: file, the default), or returns the bytes inline as base64 (encoding: base64, capped at 750 KB). Attachment ids come from the attachments array on gmail_read_message.

gmail_create_draftA

Create a Gmail draft. This tool does not send: use gmail_send_draft, which is gated on the account's allowedRecipients list.

gmail_list_draftsA

List Gmail drafts on one account, newest first. Results do not include attachment info (fetched with format: metadata, which never populates the MIME parts tree) — use gmail_get_draft on a specific draft to see its attachments.

gmail_get_draftA

Read one Gmail draft. Its output feeds directly back into gmail_update_draft.

gmail_update_draftA

Replace the contents of a Gmail draft. Gmail has no partial draft update: this replaces the whole message, so ANY ATTACHMENT NOT RE-SPECIFIED IS DROPPED. To keep an existing attachment, pass {messageId: , attachmentId: ...}.

gmail_delete_draftA

Permanently delete a Gmail draft. Requires confirm: true — a deleted draft does not go to Trash and cannot be recovered.

gmail_send_draftA

Send an existing Gmail draft. THIS SENDS REAL MAIL. Requires confirm: true, and every recipient on the draft's To, Cc and Bcc must be on the account's allowedRecipients list in accounts.json — an account with no such list cannot send at all. Without confirm, returns what would be sent and changes nothing.

calendar_list_calendarsA

List the Google Calendars an account can read.

calendar_list_eventsA

List events from one Google Calendar within a time range. Recurring events are expanded into individual occurrences. Read-only.

calendar_respond_to_eventA

Answer a calendar invitation on behalf of the calling account: accept, decline, or answer tentatively, with an optional comment to the organizer. Changes only this account's own participation status — it cannot create, move, or delete an event, or change anyone else's answer.

calendar_create_eventA

Create an event on one Google Calendar. Timed events need start and end as RFC3339 timestamps carrying a UTC offset; all-day events need startDate and endDate, where endDate is exclusive. Guests are only accepted if they are on the account's allowedRecipients, and no notification mail is sent unless sendUpdates is "all".

calendar_update_eventA

Change fields of an existing event: title, description, location, guests, or its start and end. Only the fields passed are written, except attendees, which replaces the whole guest list. Guarded with the event's etag, so a change made elsewhere in the meantime fails the write instead of overwriting it. A recurring series id is refused unless confirmSeries is true.

calendar_delete_eventA

Delete an event. THIS CANNOT BE UNDONE — Google Calendar keeps no trash for events. Without confirm: true it changes nothing and returns the event it would delete, so the decision is made against the real title and time. A recurring series id is refused unless confirmSeries is true.

ical_list_feedsA

List the subscribed iCal feeds configured in accounts.json under "calendarFeeds". Feeds are read-only by nature: an .ics subscription is a file served over HTTP and has no write protocol.

ical_list_eventsA

Read events from one subscribed iCal feed within a time range. Recurring rules are expanded into individual occurrences, and overrides of single occurrences are applied. Read-only: an .ics feed cannot be written to. Takes a feed alias from accounts.json, never a URL — so nothing read from a page or a message can make this server fetch an arbitrary host.

drive_list_filesA

List files and folders in a Google Drive folder, or search all of Drive by a name fragment. Read-only: it never opens, downloads, or reveals file content, only metadata (name, type, size, modified time, parent folders, link, checksum). Pass folderId or nameContains, not both.

drive_create_folderA

Create a folder in Google Drive. If a folder with the same name already exists directly under the given parent, that folder is returned instead of creating a duplicate. Cannot rename, move, delete, upload into, or share the folder it creates or finds.

drive_save_attachmentA

Save a Gmail attachment straight into a Google Drive folder — the bytes go directly from Gmail to Drive, never through local disk and never back in the tool result. Refuses when a file with the target name already exists in that folder rather than overwriting it. Cannot delete anything, and cannot upload a local file: only an attachment already on a Gmail message.

drive_move_fileA

Move a Google Drive file to a different folder, rename it, or both in one call. Refuses when a file with the resulting name already exists in the target folder. Cannot delete or copy the file, and cannot move it to a different Google account.

drive_move_filesA

Batch form of drive_move_file: up to 100 {fileId, folderId?, name?} rows in one call, processed in order, one result row per item with the same checks as the single tool (a name collision in the target folder, a missing target, a trashed source each refuse that row only; the others proceed). Cannot delete, copy, or move to another account.

drive_copy_fileA

Copy a Google Drive file into a folder on the same account, optionally under a new name. Drive performs the copy on its side, so no bytes pass through this server; a Google Doc or Sheet copies as the same Google type, a PDF or image byte for byte, and a copy from My Drive into a shared drive works. The copy's description records the source file and time, appended to any description the source already had. Refuses when a file with the resulting name already exists in the target folder rather than overwriting it, and refuses a folder as the source. Only copies: it cannot delete, move, rename, share, or overwrite anything, and it never modifies the source.

drive_trash_fileA

Move one Google Drive file or folder to the Drive trash (files.update with trashed=true), where Drive keeps it for 30 days and it can be restored. Never a permanent delete: this server has no files.delete and no emptyTrash. Two guards: expectedName must equal the file's current name exactly, so a wrong or stale id is refused; and without confirm: true the call changes nothing and returns the file it would trash. A folder additionally needs confirmFolder: true, because trashing a folder trashes its contents. Refuses a file that is already in the trash.

drive_trash_filesA

Batch form of drive_trash_file for an accepted list: up to 100 {fileId, expectedName} items in one call, processed in order, one result row per item; a refused row (name mismatch, already in the trash, not found, no permission) never stops the others. Same guards as the single tool: expectedName must equal each file's current name, confirm: true is required to trash and without it the call only previews, and a folder needs confirmFolder: true. Trash only, restorable for 30 days; no permanent delete exists in this server.

drive_create_spreadsheetA

Create a new Google Sheet in a Drive folder (My Drive or a shared drive) and fill its tabs in one call: name, folderId, and sheets as [{title, rows: string[][]}], up to 20 tabs and 20 000 cells. Refuses when a file with that name already exists in the folder; never writes into an existing spreadsheet, never shares. Values are written as USER_ENTERED by default (numbers and dates are parsed as a person typing them would get); pass valueInput: "RAW" to store every cell as literal text.

drive_export_fileA

Read the content of a Google-native document on Drive: a Google Sheet as CSV (one tab, default the first; pass sheet to pick another by title) or a Google Doc as plain text. Read-only and never a binary file: a PDF, image, or uploaded .xlsx is refused. The text in the result is capped at 200 KB; a larger export is truncated on a line boundary, and the full text is written into the account's download directory (OCTOMAIL_DOWNLOAD_DIR/) with its path returned as savedTo.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 41 tools

Disambiguation4/5

Tools are clearly grouped by service and action, so most names map to a distinct purpose. The closest overlap pairs are gmail_search vs gmail_search_many and the single/batch Drive variants, but their descriptions and signatures disambiguate them well.

Naming Consistency4/5

Names consistently use snake_case with service prefixes like gmail_, calendar_, ical_, and drive_, and mostly follow the verb_noun pattern. Minor inconsistencies such as gmail_get_profile and gmail_get_draft versus gmail_read_message and gmail_read_thread keep it from being a perfect 5.

Tool Count2/5

41 tools is well over the 25-tool threshold useful for a coherent single tool set, and the count is inflated by single/batch pairs like drive_move_file/drive_move_files and drive_trash_file/drive_trash_files. The breadth is partly justified by spanning Gmail, Calendar, iCal, and Drive, but the surface is still heavy and over-factored.

Completeness4/5

Core workflows are well covered: Gmail search/read/drafts/labels/filters/send, calendar CRUD and response, iCal reading, and Drive move/copy/trash/export with Gmail-to-Drive attachment saving. Gaps like direct upload, permanent Drive delete, replies, and sharing are documented or explicitly excluded, so agents can work around them.

Maintenance

ActivityActive
ResponsivenessNo issues