Skip to main content
Glama
Edison-Watch

mcp-template

by Edison-Watch

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

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

Tools

Functions exposed to the LLM to take actions

NameDescription
gmail_composer.save_draftC

Persist the current composer fields onto an existing Gmail draft.

gmail_composer.sendC

Persist composer fields then send the draft via Gmail.

gmail_composer.discardC

Delete the current draft.

gmail_composer.refreshB

Re-fetch the current draft (used by the composer to poll for agent edits).

gmail_composer.get_threadB

Fetch the full thread for display in the composer's thread panel.

gmail_composer.get_attachmentC

Fetch the raw base64 data for an attachment on a message.

gmail_inbox.refreshC

Re-run gmail_curate_inbox (called by the inbox reader app).

gmail_inbox.open_threadC

Fetch a single thread for the inbox reader app.

gmail_inbox.mark_readB

Mark a thread as read (removes the UNREAD label).

gmail_inbox.archiveC

Archive a thread (removes the INBOX label).

gmail_inbox.replyC

Create a reply draft on a thread (the composer app opens it next).

gmail_inbox.forwardC

Create a forward draft for a message in a thread.

gmail_inbox.mark_doneC

Mark a thread as done (applies MCP/Done label, hides from curated inbox).

gmail_inbox.unmark_doneC

Remove the done marker from a thread (undo mark-done).

gmail_inbox.set_focusC

Store which thread the user is currently viewing (called by inbox UI).

gmail_get_focused_emailB

Return the email thread the user is currently viewing in the inbox UI. Call this when the user asks about 'this email', 'the email I'm looking at', or references the currently open thread.

settings.getA

Fetch the current settings snapshot for the Settings app.

settings.subscribeC

Register a webhook endpoint (returns the one-time signing secret).

settings.rotate_secretC

Issue a new signing secret for a webhook subscription.

settings.unsubscribeC

Deactivate a webhook subscription.

gmail_connectC

Begin the Google OAuth flow to link a Gmail account

gmail_statusC

Return whether the user has a linked Gmail account

gmail_disconnectB

Revoke and remove the user's linked Gmail account

gmail_add_attachmentA

Attach one file to an existing Gmail draft and return the draft's full attachment list (each with attachment_id, filename, mime_type, size_bytes). Only the attachments change - body, subject, and recipients are preserved exactly. Pass the file as 'attachment' (filename + mime_type + base64 data_base64).

gmail_remove_attachmentA

Remove one file from a Gmail draft by its attachment_id and return the draft's remaining attachment list. Only the attachments change - body, subject, and recipients are preserved exactly. The attachment_id comes from any prior draft response or gmail_get_draft.

gmail_list_inboxA

List recent inbox messages, optionally filtered by a Gmail search query. When the user asks to find or open a specific email, ALWAYS follow up by calling gmail_get_thread with the thread_id to render the full conversation in an interactive UI.

gmail_get_threadA

Fetch a Gmail thread by id with full message bodies. By default attachment/inline-image bytes are omitted (each attachment still carries filename, mime_type, size, attachment_id) to keep the payload small - fetch a file on demand with gmail_get_attachment. Pass include_attachment_data=true to inline bytes, or strip_quoted_replies=true to drop repeated quoted history. When an interactive UI is rendered alongside the result, keep your text response brief since the user can browse the conversation in the UI.

gmail_get_attachmentA

Fetch the raw base64 bytes of a single attachment or inline image on a Gmail message, identified by the message_id + attachment_id echoed by gmail_get_thread. Use this to pull one file on demand instead of loading every attachment into the thread payload. data_base64 is raw encoded bytes, not a rendered image - you cannot read an image's contents from it; on vision-capable MCP hosts, image attachments are additionally rendered into context as a viewable image.

gmail_mark_thread_readB

Mark a Gmail thread as read by removing the UNREAD label

gmail_archive_threadC

Archive a Gmail thread by removing the INBOX label. Also marks the thread dismissed in the curation ledger. During a triage pass, continue on to the next uncurated or stale thread.

gmail_mark_thread_doneB

Mark a Gmail thread as done by applying the MCP/Done label (hides from curated inbox). Also marks the thread dismissed in the curation ledger. During a triage pass, continue on to the next uncurated or stale thread.

gmail_unmark_thread_doneB

Remove the MCP/Done label from a thread (undo mark-done)

gmail_curate_inboxA

Rank recent inbox threads by a deterministic heuristic score and render the inbox dashboard. This is a quick provisional view, NOT the assistant's own triage: for 'what's important / triage my inbox', prefer inbox_get_curation (banked LLM verdicts + coverage), going deeper with inbox_search + inbox_save_curation when coverage shows uncurated/stale threads. When an interactive UI is rendered alongside the result, keep your text response brief (a one-line summary) since the user can browse details in the UI. Only elaborate if the user asks.

gmail_list_draftsB

List the user's Gmail drafts

gmail_get_draftC

Fetch a single Gmail draft by id

gmail_update_draftA

Patch fields on an existing Gmail draft and open an interactive composer UI. Non-destructive by default: any field you OMIT is left unchanged on the draft, and a field set to null is CLEARED - this holds for to, cc, bcc, subject, body, and attachments. Omit 'attachments' to keep every existing file untouched (so you can edit the body repeatedly without re-uploading); pass null or [] to drop them all. 'attachments' may mix new uploads (filename + mime_type + data_base64) with references to existing files ({attachment_id}) taken from a prior response, letting you preserve specific files by id. To add or remove a single file without touching the body, prefer gmail_add_attachment / gmail_remove_attachment. The returned draft echoes the saved state (recipients, subject, body_preview, and the full attachment list with ids/filenames/sizes). ALWAYS call this tool to write or edit draft content - NEVER compose email text as plain chat text. Pass your composed text in the 'body' parameter. Keep your chat response to one brief sentence since the user can edit in the UI.

gmail_composeA

Create a new Gmail draft from the given fields and open an interactive composer UI. Returns the draft's actual saved state - draft_id, thread_id, recipients, subject, a body_preview, and the attachment list (each with attachment_id, filename, mime_type, size_bytes) - so you can verify what was saved without a follow-up gmail_get_draft. To edit it afterward use gmail_update_draft, which preserves omitted fields and keeps attachments unless you clear them. ALWAYS use this tool instead of composing email text in chat - it creates a real Gmail draft where the user can review, edit, and send. When an interactive UI is rendered alongside the result, keep your text response brief since the user can edit in the UI.

gmail_sendB

Send a previously-composed Gmail draft

gmail_discard_draftC

Delete a Gmail draft by id

gmail_reply_to_threadA

Create a reply draft on an existing Gmail thread. ALWAYS use this tool instead of composing reply text in chat - it creates a real Gmail draft and opens an interactive composer UI where the user can review, edit, and send. Pass your drafted reply in the 'body' parameter. Recipients are yours to control: pass 'to', 'cc', and/or 'bcc' (each a comma-separated address list) to set them explicitly. If you omit 'to', it defaults to the other party in the thread (never the account owner); omitted 'cc'/'bcc' are left unset. If every message in the thread is yours (no other participant to reply to), you must pass 'to' explicitly or the call errors. When an interactive UI is rendered alongside the result, keep your text response brief since the user can edit in the UI.

webhook_subscribeC

Register an HTTPS endpoint to receive signed webhook events

webhook_listB

List the caller's webhook subscriptions (secrets are never returned)

webhook_unsubscribeC

Deactivate a webhook subscription so it stops receiving events

webhook_rotate_secretB

Issue a new signing secret for a subscription (invalidates the old one)

gmail_watch_startC

Subscribe the user's Gmail inbox to push notifications

gmail_watch_stopC

Cancel the user's Gmail push-notification watch

inbox_get_curationA

Read banked inbox triage from the curation ledger. Cheap: no email bodies are fetched and no reasoning is run - it returns judgments the assistant already made (bucket, importance, summary, suggested action) plus a coverage count of curated / stale / uncurated threads in the inbox. Call this FIRST for any 'what's important / triage my inbox' request. If coverage shows many uncurated or stale threads and the user wants a thorough pass, go deeper with inbox_search + inbox_save_curation; otherwise answer directly from these banked verdicts.

inbox_searchA

Search recent inbox threads headlessly (no UI) when doing a thorough triage pass - use this to actually look at many emails. Returns thread summaries (subject, sender, snippet, recency) each annotated with its ledger status: 'uncurated' / 'stale' threads are the delta worth reasoning about; 'curated' threads are already banked and can be skipped. Uncurated threads also carry a provisional heuristic importance_prior. Pass since_history_id (from a prior result's current_history_id) to fetch only changed threads. After reasoning over the results, bank your verdicts with inbox_save_curation.

inbox_save_curationA

Bank your triage judgments for one or more threads into the curation ledger so they are not re-reasoned next time. Call this after reading and reasoning over threads (typically from inbox_search) - pass a batch of per-thread verdicts (bucket, importance, a short summary, suggested action, optional reasoning/confidence). Each write stamps the thread's current Gmail historyId so the verdict stays valid until the thread changes. This is what makes the next inbox_get_curation near-free.

webhook_settingsC

Open your settings: Gmail connection status and webhook subscriptions

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
gmail_composer app
gmail_inbox app
settings app

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Edison-Watch/Custom-MCPs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server