FGAC.ai - Manage Multiple Gmail Accounts & Edit Google Sheets and Docs

Connect AI agents to multiple Gmail accounts (work, school, personal, and inboxes teammates delegate to you) plus editable Google Sheets and Google Docs.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • List Accounts: Lists the email accounts this connection can access through FGAC. account_details reports each account's Google scope state: gmail and drive_file are 'granted', 'missing', or 'unknown'
  • Gmail List: List recent Gmail message IDs, optionally filtered by a Gmail search query (e.g. "is:unread"). Works across every connected or delegated Gmail inbox — pass the "account" parameter to targe
  • Gmail Read: Read a Gmail message by ID. Returns parsed headers, body text, and attachment metadata. Reading is allowed by default; messages matching the user's read-block rules (labels or content patt

What data it sees

Do you need an account

No: the server works without sign-in

Connect AI agents to multiple Gmail accounts (work, school, personal, and inboxes teammates delegate to you) plus editable Google Sheets and Google Docs. Send whitelists limit outbound email to recipients you approve. Per-file rules expose only the spreadsheets and documents you choose. 19 tools: typed Gmail, Sheets, Docs, and comments tools plus a rule-checked raw Google API escape hatch. OAuth sign-in, nothing to install, no Google Cloud project needed.

More Google Workspace Connections Coming Soon!

How to connect

How to connect FGAC.ai - Manage Multiple Gmail Accounts & Edit Google Sheets and Docs to Claude

The server address to paste into Claude settings:

https://fgac--fgac.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect FGAC.ai - Manage Multiple Gmail Accounts & Edit Google Sheets and Docs to ChatGPT

The server address to paste into ChatGPT settings:

https://fgac--fgac.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect FGAC.ai - Manage Multiple Gmail Accounts & Edit Google Sheets and Docs to Cursor

The server address to paste into Cursor settings:

https://fgac--fgac.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (19)

Raw names from tools/list. Only developers need these.

list_accountsLists the email accounts this connection can access through FGAC. account_details reports each account's Google scope state: gmail and drive_file are 'granted', 'missing', or 'unknown' ('unknown' means the state could not be determined right now — treat the account as usable and let a real call settle it; never treat 'unknown' as missing). A 'missing' scope means every call needing it will fail until the account is reconnected — the entry's reconnect_url is a one-click fix link to give the user; it is bound to that specific account, so the user must open it while signed in to FGAC as that account. google_token: 'unavailable' with a reconnect_url means the Google grant itself is dead (revoked, expired, or missing) — every call on that account fails until the user opens the link; do not retry, and read next_steps.reconnect first.
gmail_listList recent Gmail message IDs, optionally filtered by a Gmail search query (e.g. "is:unread"). Works across every connected or delegated Gmail inbox — pass the "account" parameter to target a specific mailbox (see list_accounts). Other Gmail read endpoints (threads, drafts, history, settings) are available via google_api_get.
gmail_readRead a Gmail message by ID. Returns parsed headers, body text, and attachment metadata. Reading is allowed by default; messages matching the user's read-block rules (labels or content patterns), if any, are withheld. Works across every connected or delegated Gmail inbox via the "account" parameter. For a full thread use google_api_get with gmail/v1/users/me/threads/{id}. Long messages: pass offset and a limit sized to your tool-result budget (chars, max 200000/call) to window the serialized message with the body UNtruncated — the envelope reports total_chars and next_offset; concatenate data strings in offset order.
gmail_get_attachmentRetrieve an email attachment by message ID plus either attachment ID or filename (allowed unless the parent message matches a read-block rule). Gmail attachment ids go stale when a message is re-indexed — stale ids are healed automatically when unambiguous, and filenames never go stale. Returns Gmail's base64url-encoded data (URL-safe alphabet, padded with "=") — decode with a base64url decoder, not standard base64. Files over ~150 KB must be read in windows: pass offset and a limit sized to YOUR tool-result budget (chars of base64url data, max 200000/call); each response reports total_chars and next_offset — concatenate the data strings in offset order, then decode once.
gmail_sendSend a plain-text email from any connected or delegated account (via the "account" parameter). Recipients must match the user's FGAC send whitelist; denied sends include a link the user can use to approve the recipient. Plain text only — for HTML, attachments, or threaded replies, use google_api_modify with Gmail messages/send and a raw RFC 2822 MIME body; the same whitelist applies.
gmail_labelsList all Gmail labels for an accessible account.
sheets_get_spreadsheetGet metadata and sheet tabs for a Google Spreadsheet exposed by the user's FGAC rules. Large responses: pass offset and a limit sized to your tool-result budget (chars, max 200000/call) — the windowed envelope reports total_chars and next_offset; concatenate data strings in offset order.
sheets_read_rangeRead cell values from a sheet tab or range in a Google Spreadsheet exposed by the user's FGAC rules. Prefer narrowing the range; for genuinely large ranges, pass offset and a limit sized to your tool-result budget (chars, max 200000/call) — the windowed envelope reports total_chars and next_offset; concatenate data strings in offset order.
sheets_update_rangeOverwrite cell values in a range of a Google Spreadsheet. Requires a Read & Write FGAC rule for the spreadsheet. Values only — for formatting, charts, or structural changes use sheets_edit; the same rule authorizes both.
sheets_append_rowsAppend rows to a sheet in a Google Spreadsheet without modifying existing cells. Requires a Read & Write FGAC rule for the spreadsheet. Values only — for formatting or structural changes use sheets_edit; the same rule authorizes both.
sheets_editApply Google Sheets batchUpdate requests to a spreadsheet — the full Sheets structural surface: cell and number formatting, conditional formats, charts, adding/renaming/deleting sheet tabs, merges, borders, filters, data validation, protected ranges (https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate). For plain cell values prefer sheets_update_range / sheets_append_rows (simpler A1 ranges). Requires a Read & Write FGAC rule for the spreadsheet. Spreadsheet comments live in the Drive API — use comments_read / comments_add. To create a new spreadsheet, use google_api_modify (POST v4/spreadsheets).
docs_read_documentRead a Google Docs document exposed by the user's FGAC rules. Returns the raw Docs API document resource (title, body content as structured JSON). Large documents: trim with the optional "fields" mask (e.g. "title,body.content"), or read in windows by passing offset and a limit sized to YOUR tool-result budget (chars of serialized JSON, max 200000/call) — each response reports total_chars and next_offset; concatenate data strings in offset order. To edit the document use docs_edit; comments live in the Drive API — use comments_read.
docs_editApply Google Docs batchUpdate requests to edit documents — insert or delete text, tables, text styles, headings, images, page breaks, and positional content (https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate). Examples: append text {"insertText":{"endOfSegmentLocation":{},"text":"..."}}, insert 3x3 table {"insertTable":{"rows":3,"columns":3,"endOfSegmentLocation":{}}}, or replace every occurrence {"replaceAllText":{"containsText":{"text":"old","matchCase":true},"replaceText":"new"}}. Requires Read & Write FGAC access. Doc comments live in Drive API — use comments_read / comments_add. Create new documents with google_api_modify (POST v1/documents). Inserted text inherits the target paragraph's style; add updateParagraphStyle NORMAL_TEXT sweep when replacing body content. Deletes are auto-verified: response ends with "verified" or returns a warning plus the actual end index if a delete applied only partially (ranges crossing table boundaries may do this despite success).
comments_readList the comments on a Google Docs document or Google Sheets spreadsheet — content, resolution state, author names, quoted anchor text, and replies — via the Drive API comments endpoint (https://developers.google.com/drive/api/reference/rest/v3/comments). Works for any file exposed by an FGAC rule.
comments_addAdd a comment to a Google Docs document or Google Sheets spreadsheet, or reply to an existing comment (pass commentId; set resolve to also mark it resolved), via the Drive API (https://developers.google.com/drive/api/reference/rest/v3/replies). Requires a Read & Write FGAC rule for the file. New comments are file-level (unanchored); anchoring to a specific range is not supported.
google_api_getPerform a read-only GET request against any Google API endpoint by path — the full read surface behind the typed convenience tools. Gmail (https://developers.google.com/gmail/api/reference/rest): messages, threads, drafts, labels, history, settings — reads are allowed by default and filtered by the user's read-block rules if any. Google Sheets (https://developers.google.com/sheets/api/reference/rest) and Google Docs (https://developers.google.com/docs/api/reference/rest): require a per-file FGAC rule. Other Google APIs (e.g. Drive drive/v3 for file listing, metadata, export, revisions; Slides slides/v1) are forwarded subject to the Google OAuth scopes the user granted — with the standard grant, Drive is limited by drive.file to files the user picked or this agent created, and a 404 can mean the file exists but is not granted. APIs outside the grant — People/Contacts, Calendar, Tasks, YouTube, and other non-Workspace-file APIs — can NEVER work through FGAC and are refused; do not probe them. Exception: comment paths (drive/v3/files/{id}/comments) follow the file's FGAC rule — comments_read is the shortcut. Batch endpoints are denied. Use this whenever no typed read tool covers the endpoint you need. Large responses: pass offset and a limit sized to your tool-result budget (chars, max 200000/call) — the windowed envelope reports total_chars and next_offset; concatenate data strings in offset order.
google_api_modifyPerform a POST, PUT, or PATCH request against a Google API endpoint by path — the full write surface behind the typed convenience tools. Docs: v1/documents/{id}:batchUpdate (tables, styles, images) on documents with a Read & Write rule. Sheets: every write endpoint on spreadsheets with a Read & Write rule, incl. v4/spreadsheets/{id}:batchUpdate (formatting, charts, tabs). Creating files is allowed and auto-granted to this connection: POST v1/documents, v4/spreadsheets, or slides/v1/presentations. Gmail (https://developers.google.com/gmail/api/reference/rest): mailbox writes are allowed by default — labels, drafts, messages/{id}/modify (archive/mark-read), trash/untrash, batchModify, insert/import. Sends are whitelisted: messages/send (base64url raw RFC 2822 body; HTML/MIME/replies OK) and drafts/send (recipients resolved from the stored draft) both check every recipient against the user's send whitelist. Gmail settings writes need Google scopes FGAC does not hold and are refused; permanent deletion (batchDelete) is never available. Comment writes (drive/v3/files/{id}/comments) require a Read & Write rule for the file — comments_add is the shortcut. Other Drive-file writes are forwarded under the per-file drive.file grant (user-picked or agent-created files). APIs outside the grant (People/Contacts, Calendar, Tasks, …) NEVER work and are refused — do not probe them. Batch endpoints are denied; DELETE is never available. Denied calls return a one-click approval link.
request_accessAsk the user to grant this agent a specific permission: sending email to a recipient, or read/write access to a Google Spreadsheet or Google Docs document. Returns a permanent approval link for the user — calling this tool grants nothing by itself; the user must open the link and approve. For a spreadsheet or document, pass resourceName (the file's title) whenever you know it: the approval page shows it, and without it the user only sees Google's file id while Google's picker lists files by name.
get_my_permissionsShows the access rules, accessible accounts, proxy key, and default access posture (including implicit Gmail read access) that apply to this connection.