Google Sheets MCP vs Google Workspace MCP

A side-by-side look at the Google Sheets MCP and Google Workspace MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Google Sheets MCP logoGoogle Sheets MCPWorkplace & Productivity · Local subprocess (stdio)MCP server for the Google Sheets API: read and write ranges, sheets, formatting, charts, sharing.63GoodAuth: oauth 2.0Google Workspace MCP logoGoogle Workspace MCPWorkplace & Productivity · Local subprocess (stdio)Comprehensive Google Workspace MCP server with full support for Google Calendar, Drive, Gmail, and Docs, Forms, Chats, Slides and Sheets over stdio, Streamable HTTP and SSE transports.68GreatAuth: oauth 2.0

Verdict: choose Google Sheets MCP for workplace & productivity work as a local process; choose Google Workspace MCP for workplace & productivity as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Google Sheets MCP logoChoose Google Sheets MCP when

  • You need dedicated capabilities in the Workplace & Productivity domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: OAuth 2.0.
  • You have the keys it needs: GOOGLE_SHEETS_CLIENT_ID, GOOGLE_SHEETS_CLIENT_SECRET, GOOGLE_SHEETS_REFRESH_TOKEN.
  • You want tools like auth_status, setup_instructions, set_client.
Explore Google Sheets MCP

Google Workspace MCP logoChoose Google Workspace MCP when

  • You need dedicated capabilities in the Workplace & Productivity domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: OAuth 2.0.
  • You want tools like start_google_auth, search_gmail_messages, get_gmail_message_content.
Explore Google Workspace MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecGoogle Sheets MCP logoGoogle Sheets MCPGoogle Workspace MCP logoGoogle Workspace MCP
CategoryWorkplace & ProductivityWorkplace & Productivity
Quality signal63/100 · Good68/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthOAuth 2.0OAuth 2.0
PricingFreeFree
Required env varsGOOGLE_SHEETS_CLIENT_IDGOOGLE_SHEETS_CLIENT_SECRETGOOGLE_SHEETS_REFRESH_TOKENNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars13,485
Directory activity 0 views 0 installs 0 upvotes 8 views 0 installs 0 upvotes
Tools26123

Tools & capabilities

Google Sheets MCP tools 26

  • auth_statusShows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.
  • setup_instructionsStep-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.
  • set_clientSaves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.
  • start_loginFirst step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.
  • finish_loginSecond step: waits up to 20 s for the browser consent to finish, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.
  • logoutRevokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.
  • create_spreadsheetCreates a new Google Sheets spreadsheet and returns it: spreadsheetId, spreadsheetUrl, properties (title, locale, timeZone) and sheets[] with each sheet's numeric sheetId. sheet_titles creates one tab per title in order (omitted = a single default "Sheet1"). The file lands in the authorized user's My Drive root — moving it into a folder needs the Drive API, which this server does not cover. Save the returned spreadsheetId: the Sheets API has no list endpoint of its own (search_spreadsheets exists, but it needs a Drive scope on the token).
  • get_spreadsheetReturns the spreadsheet's structure: properties (title, locale, timeZone), sheets[] with properties (sheetId, title, index, gridProperties incl. rowCount/columnCount and frozenRowCount/frozenColumnCount), plus each sheet's protectedRanges, conditionalFormats, tables and charts, and the spreadsheet's namedRanges. Call this FIRST whenever a structural tool needs a sheetId, protectedRangeId, tableId, chartId or a conditional-format rule index — titles are not addresses. By default no cell data is returned; include_grid_data=true (optionally limited to ranges) embeds cells but is heavy — prefer read_values for data. fields is a partial-response mask to trim the payload, e.g. "sheets.properties".
  • search_spreadsheetsFinds Google Sheets spreadsheets the authorized user can open (own files and shared drives; trashed files are excluded): id, name, createdTime, modifiedTime, owners and webViewLink per file, newest-modified first by default. name_contains filters by name substring; omit it to list everything. Paginate with page_token from nextPageToken. This is the one read that goes through the Drive API internally, so the OAuth token needs a Drive scope (drive, drive.readonly or drive.file for app-created files) — with only the spreadsheets scope it fails with 403 while every other tool still works.
  • read_valuesReads one or more A1 ranges in a single call (one request against the quota, however many ranges) and returns valueRanges[] — each with its resolved range and a 2-D values array (outer = rows unless major_dimension=COLUMNS). Trailing empty rows/columns are omitted; a fully empty range has no values key at all. value_render_option: FORMATTED_VALUE (default, strings as displayed, honoring the cell's number format and locale), UNFORMATTED_VALUE (raw numbers/booleans), FORMULA (the formula text, e.g. "=SUM(A1:A10)" — the way to read formulas). With UNFORMATTED_VALUE, dates arrive as serial numbers unless date_time_render_option=FORMATTED_STRING.
  • write_valuesOverwrites one A1 range with a 2-D values matrix (rows first) and returns updatedRange/updatedRows/updatedColumns/updatedCells. The matrix is anchored at the range's top-left corner; cells beyond the matrix keep their old content, and a null entry skips (does not clear) that cell — use clear_values to empty cells. value_input_option USER_ENTERED (default) parses input like typing in the UI: "=SUM(A1:A10)" becomes a live formula, "1,234" and "2026-01-15" become number/date per the spreadsheet locale; RAW stores everything as literal values. For several ranges use batch_write_values (one quota unit instead of N).
  • batch_write_valuesOverwrites several A1 ranges in ONE call — one write against the per-minute quota instead of one per range, so always prefer this over looping write_values. data is a list of {range, values} pairs; all are written with the same value_input_option (USER_ENTERED parses formulas/numbers/dates, RAW stores literally). Returns totalUpdatedCells and a per-range responses[] breakdown. Like write_values, null entries skip cells rather than clearing them.
  • +14 more on the listing page

Google Workspace MCP tools 123

  • start_google_authManually initiate Google OAuth authentication flow. NOTE: This is a legacy OAuth 2.0 tool and is disabled when OAuth 2.1 is enabled. The authentication system automatically handles credential checks and prompts for authentication when needed. Only use this tool if: 1. You need to re-authenticate with different credentials 2. You want to proactively authenticate before using other tools 3. The automatic authentication flow failed and you need to retry In most cases, simply try calling the Google Workspace tool you need - it will automatically handle authentication if required.
  • search_gmail_messagesSearches messages in a user's Gmail account based on a query. Returns both Message IDs and Thread IDs for each found message, along with Gmail web interface links for manual verification. Supports pagination via page_token parameter.
  • get_gmail_message_contentRetrieves the full content (subject, sender, recipients, body) of a specific Gmail message. Bodies are returned inline and truncated at 20,000 characters. Set full=True to get the complete, untruncated message instead: it is exported to disk and the response carries a short-lived download URL (HTTP transport) or file path (stdio transport) rather than the body, so large messages never stream through the model context. Stateless deployments have no file storage, so there full=True returns the untruncated body inline.
  • get_gmail_messages_content_batchRetrieves the content of multiple Gmail messages in a single batch request. Supports up to 25 messages per batch to prevent SSL connection exhaustion.
  • get_gmail_attachment_contentDownloads an email attachment and saves it to local disk. In stdio mode, returns the local file path for direct access. In HTTP mode, returns a temporary download URL (valid for 1 hour). May re-fetch message metadata to resolve filename and MIME type.
  • send_gmail_messageSends an email using the user's Gmail account. Supports new emails, replies, and forwards, with optional attachments. Supports Gmail's "Send As" feature to send from configured alias addresses. To forward an existing message, pass forward_message_id. The original subject, body (quoted with a "Forwarded message" header), and attachments are carried over. In forward mode, body (if any) is prepended as a note and subject is optional. Threading, reply, and signature options do not apply when forwarding. THIS TOOL SENDS IMMEDIATELY AND CANNOT SCHEDULE. Gmail's REST API exposes no send-time parameter; Schedule send is a web-UI feature with no API equivalent, so no argument to this tool can defer delivery. Never tell a user a message was scheduled. For "prepare now, deliver later", create a draft with draft_gmail_message. An external scheduler must retain the message data to create and send a new message via send_gmail_message at the chosen time, or call users.drafts.send with the draft ID returned by draft_gmail_message. Alternatively, let the user schedule that draft in the Gmail UI.
  • draft_gmail_messageCreates a draft email in the user's Gmail account. Supports both new drafts and reply drafts with optional attachments. Supports Gmail's "Send As" feature to draft from configured alias addresses. SCHEDULED SEND IS NOT AVAILABLE. Gmail's REST API exposes no send-time parameter; the Schedule send feature is web-UI only, and a message cannot be placed in the Scheduled folder through the API. Do not claim a message was scheduled. To deliver at a chosen time, create a draft with draft_gmail_message. An external scheduler must retain the message data to create and send a new message via send_gmail_message then, or call users.drafts.send with the draft ID returned by draft_gmail_message. Alternatively, let the user schedule the draft in the Gmail UI.
  • get_gmail_thread_contentRetrieves the complete content of a Gmail conversation thread, including all messages. Optionally also returns structured ownership analysis so a caller can determine who sent the last message and who owes whom a response without re-parsing the formatted string or making a second tool call.
  • get_gmail_threads_content_batchRetrieves the content of multiple Gmail threads in a single batch request. Supports up to 25 threads per batch to prevent SSL connection exhaustion.
  • list_gmail_labelsLists labels in the user's Gmail account.
  • manage_gmail_labelManages Gmail labels: create, update, or delete labels.
  • list_gmail_filtersLists all Gmail filters configured in the user's mailbox.
  • +111 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Google Sheets MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "google-sheets-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@a1-x-tech/mcp-google-sheets@latest"
      ],
      "env": {
        "GOOGLE_SHEETS_CLIENT_ID": "YOUR_GOOGLE_SHEETS_CLIENT_ID_HERE",
        "GOOGLE_SHEETS_CLIENT_SECRET": "YOUR_GOOGLE_SHEETS_CLIENT_SECRET_HERE",
        "GOOGLE_SHEETS_REFRESH_TOKEN": "YOUR_GOOGLE_SHEETS_REFRESH_TOKEN_HERE"
      }
    }
  }
}

Google Workspace MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "taylorwilsdon-google-workspace-mcp": {
      "command": "uvx",
      "args": [
        "workspace-mcp"
      ]
    }
  }
}

Frequently asked questions

Google Sheets MCP is categorized under Workplace & Productivity and uses a local stdio subprocess. Google Workspace MCP belongs to Workplace & Productivity and uses a local stdio subprocess. Pick Google Sheets MCP for workplace & productivity work and Google Workspace MCP for workplace & productivity.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Google Sheets MCP is listed as free. Auth: oauth 2.0. Google Workspace MCP is listed as free. Auth: oauth 2.0. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add google-sheets-mcp and taylorwilsdon-google-workspace-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Google Sheets MCP has a quality signal of 63/100 (Good) with 0 views, 0 installs and 1 GitHub stars. Google Workspace MCP has 68/100 (Great) with 8 views, 0 installs and 3,485 GitHub stars.