draft-only-google
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DRAFT_ONLY_GOOGLE_ACCOUNT | No | Makes login refuse any other Google account. Also the Keychain account name; without it the name is default. | |
| DRAFT_ONLY_GOOGLE_TIME_ZONE | No | The default time zone for calendar events. | UTC |
| DRAFT_ONLY_GOOGLE_SERVER_NAME | No | The name the MCP server reports. | draft-only-google |
| DRAFT_ONLY_GOOGLE_ATTACHMENT_DIR | No | Where download_attachment saves files. | ~/Downloads/draft-only-google-mcp |
| DRAFT_ONLY_GOOGLE_ALLOW_ATTENDEES | No | Set to 1, true, yes or on to let create_event and update_event set guests. | off |
| DRAFT_ONLY_GOOGLE_ATTACHMENT_ROOTS | No | Folders create_draft may attach from, separated by ':'. Defaults to the attachment folder. Links are followed first, and a draft's attachments are capped at 25 MB in total. | |
| DRAFT_ONLY_GOOGLE_KEYCHAIN_SERVICE | No | The Keychain service name. | draft-only-google-mcp |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Gmail and Google Calendar for the signed-in Google account. Email can only be drafted here, never sent: a person reviews and sends each draft.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_threadsA | Search Gmail threads with Gmail search syntax (from:, to:, subject:, newer_than:7d, is:unread, in:sent, label:...). Returns each thread's latest message summary. Use get_thread for full bodies. |
| get_threadB | Get every message in a Gmail thread with headers, plain-text body and attachment list. |
| get_messageB | Get one Gmail message with headers, plain-text body and attachment list. |
| download_attachmentB | Save an attachment to the attachment folder under a new unique name and return the local path. |
| list_labelsA | List Gmail labels with their ids. |
| modify_thread_labelsA | Add or remove label ids on a thread. Archive = remove INBOX. Mark read = remove UNREAD. |
| create_draftA | Create a draft in the mailbox (it is NOT sent). For a reply, pass reply_to_message_id and leave subject empty to get "Re: " threaded correctly. Write each paragraph as one line; lines wrapped by hand are joined so the email fills the reader's window. attachments: absolute paths of local files to attach. Each must be a regular file inside the attachment folder or DRAFT_ONLY_GOOGLE_ATTACHMENT_ROOTS, and together they must fit in 25 MB. |
| update_draftC | Replace the contents of an existing draft. |
| list_draftsC | List drafts in the mailbox, including any Bcc recipients. |
| list_calendarsB | List calendars visible to the account. |
| list_eventsA | List calendar events between two RFC 3339 times (e.g. 2026-01-15T00:00:00+01:00). Recurring events are expanded into single instances, ordered by start time. |
| get_eventC | Get one calendar event. |
| create_eventB | Create a calendar event. start/end are RFC 3339 datetimes or YYYY-MM-DD for all-day. attendees is refused unless DRAFT_ONLY_GOOGLE_ALLOW_ATTENDEES is on. This server asks Google not to notify guests, but the event may still appear on their calendars and Google may still email them, so treat adding a guest as a visible action. |
| update_eventA | Change fields on a calendar event; omitted fields stay as they are. attendees replaces the whole list and is refused unless DRAFT_ONLY_GOOGLE_ALLOW_ATTENDEES is on. This server asks Google not to notify guests, but Google may still email them about a change. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Each tool targets a distinct resource+action pair (thread vs message vs draft vs event), and the descriptions explicitly cross-reference each other (search_threads points to get_thread for full bodies). The only borderline pair is get_thread vs get_message, which requires the agent to know Gmail's thread/message model, but the descriptions make the split workable.
All 14 tools follow a strict snake_case verb_noun pattern (list_/get_/search_/create_/update_/modify_/download_). No mixed conventions or vague verbs anywhere in the set.
14 tools is well within a comfortable range and each maps to a concrete Gmail or Calendar operation. The split across threads, messages, attachments, labels, drafts, events, and calendars is proportionate to the two-API scope.
Read/create/update lifecycle is covered for drafts and events, and send is intentionally excluded by design (draft-only). However, there is no delete_draft, no delete_event, no get_draft, and no way to modify labels on individual messages rather than threads, leaving dead ends for cleanup workflows.