Skip to main content
Glama
aaronsb

Google Workspace MCP Server

by aaronsb

Google Workspace MCP Server

npm version Latest release Node License

Give your AI agent real access to Google Workspace — Gmail, Calendar, Drive, Docs, Sheets, Tasks, Meet and Contacts — from one MCP server, across as many accounts as you have.

Search your mail, check your calendar, write a doc, file a task — in conversation, as yourself.

Install

First, you need Google OAuth credentials — the one prerequisite common to every path:

  1. Go to console.cloud.google.com/apis/credentials

  2. Create an OAuth 2.0 Client ID, application type Desktop app

  3. Enable the APIs you want (Gmail, Calendar, Drive, Sheets, Docs, Tasks, Meet — and People API for contacts, which is what Google calls it in the console)

  4. Keep the Client ID and Client Secret handy — you'll paste them in below

Then pick the path that matches how you work. All three run the same server.

Node 22.12 or newer. (Node 18 and 20 are both end-of-life.)


📦 → 🤖 Claude Desktop — one-click .mcpb install (recommended)

Download google-workspace-mcp.mcpb from the latest release, then drag it onto the Claude Desktop window, or double-click it.

Claude Desktop opens an install dialog with three fields:

Field

Google OAuth Client ID

required — from the step above

Google OAuth Client Secret

required — from the step above

Workspace Directory

optional — where attachments, downloads and exports land. Defaults to ~/.local/share/google-workspace-mcp/workspace/. Give it a dedicated folder — not your home, Documents, Desktop, or a Google Drive folder.

Paste, hit Save, done. No JSON to edit, no Node to install, no paths to get right — the bundle carries the server and every dependency.

One bundle covers every platform — macOS (Intel and Apple Silicon), Linux (x64 and ARM64), and Windows. There is nothing to choose: the server is pure JavaScript, so there is no platform-specific payload to pick between.

Cross-platform note: .mcpb files install via Claude Desktop's bundled handler. If double-clicking doesn't trigger Claude on your system, drag the file onto the Claude Desktop window instead, or right-click → "Open with…" and pick Claude Desktop (then "always open with" if your OS offers). Behavior varies: macOS usually auto-associates, Windows may need a one-time association, Linux varies by desktop environment.


Claude Code — one command

claude mcp add google-workspace \
  -e GOOGLE_CLIENT_ID=your-client-id \
  -e GOOGLE_CLIENT_SECRET=your-client-secret \
  -- npx -y @aaronsb/google-workspace-mcp

That's it — no file to edit. Verify with /mcp.


Other MCP clients

Add an entry to the client's MCP config file (for Claude Desktop by hand, that's claude_desktop_config.json; for Claude Code, .mcp.json):

{
  "mcpServers": {
    "google-workspace": {
      "command": "npx",
      "args": ["-y", "@aaronsb/google-workspace-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Or install it globally and point at the binary directly:

npm install -g @aaronsb/google-workspace-mcp

Related MCP server: google-mcp

How it fits together

flowchart LR
    human["🧑 You<br>ask in plain language"]
    agent["🤖 Your AI agent<br>Claude Desktop, Claude Code…"]
    server["⚙️ This MCP server<br>picks the right account,<br>builds the real request"]
    keys[("🔑 Your accounts<br>OAuth tokens, kept<br>on your own machine")]
    google["☁️ Google<br>Gmail · Calendar · Drive · Docs<br>Sheets · Tasks · Meet · Contacts"]

    human -->|"“what's on my calendar?”"| agent
    agent -->|"tool call"| server
    server <-->|"which account?"| keys
    server -->|"real API call, as you"| google
    google -->|"your data"| server
    server -->|"shaped for an agent<br>+ what to do next"| agent
    agent -->|"an answer"| human

    classDef person   fill:#475569,color:#ffffff,stroke:#94a3b8
    classDef robot    fill:#2d7d9a,color:#ffffff,stroke:#4a5568
    classDef ours     fill:#7c3aed,color:#ffffff,stroke:#8b5cf6
    classDef secrets  fill:#2d8e5e,color:#ffffff,stroke:#4a5568
    classDef external fill:#f6821f,color:#1a1a1a,stroke:#d97706

    class human person
    class agent robot
    class server ours
    class keys secrets
    class google external

Your credentials never leave your machine. The server holds an OAuth token per account, on your own disk, and calls Google as you — there is no middleman service, no account of ours, nothing to sign up for. Add as many accounts as you like (personal and work, side by side); the server routes each request to the right one.

What it can do

12 tools across 8 Google services, plus multi-account handling, per-account read-only access, bulk execution, content authoring, and a file sandbox.

Tool

What It Does

manage_email

Gmail — search, read (plain or sanitized HTML), send, reply / reply-all, forward, triage, trash, labels, threads, attachments

manage_calendar

Calendar — list, agenda, get, create, quickAdd (natural language), update, delete, calendars, freebusy

manage_drive

Drive — search, get, upload, download, copy, rename / move, delete, export, permissions, comments, view images

manage_sheets

Sheets — read / write ranges (row-numbered output), append, clear, manage tabs, copy / duplicate / rename

manage_docs

Docs — get, create, append, insert text, find-and-replace

manage_tasks

Tasks — list / create / update / complete tasks and task lists

manage_meet

Meet — create and configure meeting spaces, see who is in a call now, browse past conferences, participants, transcripts, recordings, smart notes

manage_contacts

Contacts — look people up in your saved contacts, the addresses you have only corresponded with, and your organization's directory; create, update and delete contacts

manage_accounts

Multi-account lifecycle — add accounts, manage credentials and scopes

manage_scratchpad

Compose / edit multi-line content (line- or JSON-path-addressed), attach files, send to any target; JSON mode live-syncs to Docs / Sheets

manage_workspace

File operations in the workspace sandbox (exchange point for attachments, downloads, exports)

bulk_operations

Do many things in one call — chain different operations in sequence with $N.field references, or apply one operation to many resources in a single Google request (queue_operations still works as an alias)

Every response carries next-steps guidance, so the agent always knows what it can do next.

One ask, many steps

The useful part isn't any single operation — it's that your agent can string them together.

You ask for one thing. The agent works out that it needs four API calls, in order, each one feeding the next:

sequenceDiagram
    autonumber
    participant H as 🧑 You
    participant A as 🤖 Your agent
    participant S as ⚙️ MCP server
    participant G as ☁️ Google

    H->>A: "file the invoice from Acme<br>and remind me to pay it Friday"
    A->>S: find the email
    S->>G: search Gmail
    G-->>S: the message
    S-->>A: found it — and here's what you can do next
    A->>S: save the attachment
    S->>G: download it
    A->>S: put it in Drive
    S->>G: upload
    A->>S: create a task, due Friday
    S->>G: Google Tasks
    A-->>H: Done. Invoice filed, task set for Friday.

Two things make this work. Every response tells the agent what it can do next, so it isn't guessing at the next step. And bulk_operations lets it run a whole chain in one call, feeding each result into the next — so "find the invoice, file it, remind me" is a single round trip rather than four.

When the work is the same operation over many things, it can go further and use one Google request for all of them:

bulk_operations { mode: 'batch', tool: 'manage_email', operation: 'trash',
                  items: ['msg1', 'msg2', 'msg3', … ] }

Two hundred messages trashed in one round trip instead of two hundred. This is narrow on purpose — it works only where Google publishes a method for it, which today is contacts (create, update, delete, get) and Gmail (trash, label changes). Ask for it anywhere else and the answer names the operations that can, and points you back at sequential mode, which works everywhere.

Ask for what's missing

This server exposes 95 operations, reaching 79 of the 257 methods Google publishes across those eight APIs. It is a curated subset on purpose: an agent has to choose among these, and every method it must weigh is one it can pick wrongly. A tool with 257 operations isn't more capable than one with 95 — it's harder to use correctly.

But that judgement was made without you.

Browse every method Google publishes

Every method is listed — what it does, whether we expose it, and a Request link that opens a pre-filled issue. The descriptions are Google's own, quoted verbatim, and the page is generated from the same specification the client is built from, so it can't drift from reality.

That page also lists three whole APIs this server doesn't touch yet — Chat, Slides and Forms — for the same reason: not targeted is a decision, not a fact of nature.

A good request names the task, not the method:

"I want the agent to file incoming invoices into a folder automatically."

That can be evaluated. It might turn out an existing operation already does it, or that the right answer is a different method than the one you found. "Expose users.settings.filters.create" is a conclusion, not a case — lead with the problem and let the method follow.

Why Apache 2.0, and not open core

Everything is here. There is no paid tier, no "enterprise" build, no feature held back to sell you later. What you install is what exists.

Open core works by keeping the good part back. The free thing is a lead magnet, and the moment your use gets serious you discover the operation you need lives behind a licence. That model would be especially rotten here: this is a piece of plumbing between you and your own data, using your own Google credentials, running on your own machine. Nothing about that arrangement should have a paywall in the middle of it, and nothing about it needs a vendor.

Apache 2.0 rather than MIT for two concrete reasons:

  • An explicit patent grant. Contributors licence their patent claims along with their code, so using this can't become a patent problem later. MIT is silent on patents, which means the question is merely unanswered rather than settled.

  • It's safe to adopt at work. Apache 2.0 is on essentially every corporate allow-list. Fork it, vendor it, ship it inside a commercial product — you don't owe anyone anything, and you don't need to ask.

The one obligation is attribution: keep the notices (NOTICE, LICENSE) with the code. That's it.

Through v3.0.0 this project was MIT-licensed, and that history is preserved rather than erased — MIT-era contributions keep their original notice in LICENSE-MIT, and their authors are credited in NOTICE. Apache 2.0 takes back nothing MIT permitted.

Usage

Add an account (opens a browser for OAuth):

manage_accounts { "operation": "authenticate" }

Then use any tool with your account email:

manage_email    { "operation": "triage", "email": "you@gmail.com" }
manage_calendar { "operation": "agenda", "email": "you@gmail.com" }
manage_drive    { "operation": "search", "email": "you@gmail.com", "query": "quarterly report" }

Give an account read-only access

Some accounts should never be written to. Ask for less at consent time and the token itself cannot send, edit or delete — this isn't a rule layered over a broad token:

manage_accounts { "operation": "scopes", "email": "you@gmail.com",
                  "services": "gmail,drive,contacts", "access": "read" }

Google is asked for the read-only variant of each scope, so ticking every box on the consent screen still yields a read-only token. manage_accounts status reports what each account actually holds.

A write from a read-only account is refused before the request leaves, with the account, the operation, and the way back:

'create' needs write access to contacts. Account you@gmail.com was authorized
read-only for contacts. Re-authorize with manage_accounts {operation:'scopes',
email:'you@gmail.com', services:'contacts', access:'readwrite'}, or use an
account that already has it.

Where a service has no read-only scope, you're told which ones and what they'll still be able to do before the browser opens.

Multi-step workflows

Chain operations with result references — the output of one step feeds the next:

{
  "operations": [
    { "tool": "manage_email", "args": { "operation": "search", "email": "you@gmail.com", "query": "from:boss subject:review" }},
    { "tool": "manage_email", "args": { "operation": "read", "email": "you@gmail.com", "messageId": "$0.messageId" }}
  ]
}

One operation, many things

Where Google publishes a method for it, the same operation across many resources costs one request:

{
  "mode": "batch",
  "tool": "manage_contacts",
  "operation": "delete",
  "email": "you@gmail.com",
  "items": ["people/c1", "people/c2", "people/c3"]
}

Anything shared by the whole batch goes at the top level; items carry only what differs — a bare id is enough when that's all it is.

Where your data lives

Follows the XDG Base Directory Specification:

Data

Location

Account registry

~/.config/google-workspace-mcp/accounts.json

Credentials

~/.local/share/google-workspace-mcp/credentials/

Workspace (file exchange)

~/.local/share/google-workspace-mcp/workspace/

Credentials are per-account files holding standard OAuth tokens. No secrets are stored in the project directory.

Under the hood

You don't need any of this to use the server. But if you're curious, or you want to add an operation:

The server builds its Google API client from Google's own machine-readable API specifications. Nothing is transcribed by hand, so the surface can't drift from reality, and adding an operation is a YAML edit rather than a code change.

  • How it works — the build-time / runtime split, the descriptor, the factory

  • API coverage — what's exposed, what isn't, and how to ask for more

  • The full API surface — every method Google publishes, plus the three APIs we don't target yet

  • Architecture decisions — the ADRs, including why this server owns its Google client outright

License

Apache License 2.0 — see Why Apache 2.0 above.

Available Tools

13 tools
bulk_operationsA

Do many things in one call, two ways. mode:'queue' (default) runs different operations in sequence, chaining results with $N.field — works for every tool. mode:'batch' does ONE operation across many resources in a single Google request — far fewer round trips, but only where Google publishes a batch method.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoqueue (default): N operations, N API calls, in order, with $N.field references between them. batch: ONE operation across many resources in a single API call — no $N references, because there is no 'between'.
toolNobatch only — the tool to call, e.g. 'manage_contacts'.
emailNobatch only — the account to act as.
itemsNobatch only — one entry per resource. A bare id string is enough when that is all that differs, e.g. ['people/c1', 'people/c2']; use objects when items carry more, e.g. [{name: 'Ada Lovelace', contactEmail: 'ada@example.com'}]. Anything shared by the WHOLE batch — labels to add, a field mask — goes at the top level of this call, not in here.
detailNosummary: one-line status per operation (default) | full: include complete output from each operation
operationNobatch only — the operation to apply to every item, e.g. 'delete'. Ask for one that cannot batch and the error names the ones that can.
operationsNoOperations to execute sequentially

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It explains that queue mode executes operations sequentially, supports $N.field chaining, and that batch mode reduces round trips but only where Google publishes a batch method. This is meaningful behavioral context, though it does not discuss side effects, error behavior beyond the schema's onError field, or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and packs the essential mode distinction into a compact, readable form. Every clause earns its place, and the queue/batch contrast is immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 7-parameter tool with no output schema and no annotations, the description plus a 100%-covered input schema is nearly complete. It explains the two modes, sequencing, chaining, and the batch limitation. It does not warn about destructive side effects or enumerate which Google operations have batch support, but the schema's operation description points to the error message for that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description reinforces the mode distinction and the 'one call' semantics, but it does not add parameter-level information beyond what the input schema already provides for tool, email, items, detail, operation, and operations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: perform many operations in a single call, with two distinct modes. It differentiates the internal modes (queue vs batch) but does not explicitly distinguish itself from its sibling queue_operations, so it stops just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical guidance: queue is the default and works for every tool, while batch is appropriate when one operation applies across many resources and Google exposes a batch method. It clearly contrasts the two modes, though it does not explicitly state when to prefer individual sibling tools over this bulk tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_accountsA

Manage Google Workspace account lifecycle: list, authenticate, check status, refresh credentials, update scopes, or remove accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoRequired for remove, status, refresh, scopes
accessNoHow much this account may do. 'readwrite' (default) is full access. 'read' asks Google for read-only permissions instead, so the account can look things up but cannot send, edit or delete. Some services have no read-only option — you will be told which before the browser opens, and nothing is authorized until you confirm.
categoryNoFor authenticate (default: personal)
servicesNoFor scopes — comma-separated service names (e.g. gmail,drive,calendar,sheets)
operationYeslist: show all accounts | authenticate: add new account (opens browser) | remove: delete account and credentials | status: check token validity and scopes | refresh: renew credentials | scopes: re-auth with different services | capabilities: show available services, safety policies, and workspace status
descriptionNoFor authenticate — optional label
confirmWriteAccessNoSet true to go ahead when 'read' was asked for but some services can only be granted full access. Only needed after a first call has told you which ones.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It names operations like 'authenticate' and 'remove accounts' but does not mention that authentication opens a browser, removal deletes credentials, or that read-only access has caveats. Some of these details appear in the schema parameter descriptions, but the tool description itself is thin on side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the resource and immediately lists the supported operations. It is efficient and scannable, though the list is somewhat dense and could be broken out for easier parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema is rich and compensates for much of the missing operational detail, so the overall tool definition is usable. However, with no annotations and no output schema, the description leaves workflow-level behavior such as the browser-based auth flow, return values, and removal consequences implicit rather than explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema provides rich detail for every parameter, including the operation enum, access modes, and confirmWriteAccess flow. The description adds no parameter-level meaning itself, so it earns the baseline but no extra credit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: Google Workspace account lifecycle, and enumerates distinct operations (list, authenticate, status, refresh, scopes, remove). This clearly distinguishes it from sibling resource tools like manage_calendar or manage_drive without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual scope: account lifecycle management, and the operation list implies the concrete cases where this tool is appropriate. It does not explicitly name alternatives or state when not to use this tool, but the scope is unambiguous enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_calendarB

List events, view agenda, check availability, or manage calendar events.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd time (ISO 8601) — or, when allDay is true, a DATE (YYYY-MM-DD) that is the INCLUSIVE last day; the exclusive end date the Calendar API requires is computed for you. Optional for all-day events: a missing end (or one equal to start) makes a one-day event.
daysNoNumber of days ahead to show (default: today only)
meetNoAdd a Google Meet video conference link. On `update`, true adds a link and false REMOVES an existing one; omit it to leave the link as it is.
textNoNatural language event description
weekNoShow this week's events
emailYesAccount email address
queryNoFree-text search terms to filter events
startNoStart time (ISO 8601) — or a DATE (YYYY-MM-DD) when allDay is true
allDayNoWhether the event is all-day. When true, start and end are DATES (YYYY-MM-DD — an ISO datetime's date part is used) and end, if given, is the INCLUSIVE last day; the exclusive end date the Calendar API requires is computed for you. Omit it (or pass false) for a timed event with start/end as dateTime — pass false with new datetimes to convert an all-day event back to a timed one. On `update`, converting TO all-day needs only one of start/end; the other is derived from the event on record. Converting FROM all-day needs both, because the missing one would need a time of day only you can choose.
eventIdNoEvent ID
summaryNoEvent title
timeMaxNoEnd of range (ISO 8601)
timeMinNoStart of range (ISO 8601). On `list`, defaults to today.
locationNoEvent location
tomorrowNoShow tomorrow's events instead of today
attendeesNoComma-separated email addresses. On `update`, whatever you pass REPLACES the existing list — addresses you leave out are removed, and an empty string clears everyone. OMIT the parameter to leave the attendee list untouched while changing other fields. On `freebusy`, the addresses whose availability to check.
operationYeslist: upcoming events — defaults to primary calendar, use calendarId to target a specific calendar (use 'calendars' operation to discover IDs) | agenda: today's schedule at a glance (all calendars). Returns calendarId per event for follow-up get calls. | get: full event details by ID. For shared calendar events, calendarId is required (use agenda or list to discover it). | create: create a new calendar event | quickAdd: create event from natural language (e.g. 'Lunch with Alice tomorrow at noon') | update: update an existing event (patch semantics — only changed fields needed) | delete: delete an event | calendars: list all calendars the user has access to | freebusy: check availability (free/busy) for a time range. Automatically includes own calendar; add attendees to check others.
calendarIdNoCalendar ID. Use the `calendars` operation to list available IDs; required for events on shared calendars. Defaults to 'primary' on the event operations (`list`, `get`, `create`, `quickAdd`, `update`, `delete`). On `agenda`, a calendar name or ID to filter to — OMIT it to span all calendars, and do not pass 'primary', which is an API alias rather than an id agenda matches on. On `freebusy`, a comma-separated list of calendar IDs to check IN ADDITION to your own.
maxResultsNoMax events (default: 10, max: 50)
descriptionNoEvent description or notes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description itself must disclose behavioral traits. It only lists broad capabilities and never mentions that create/update/delete mutate data, that update uses patch semantics, that attendees are replaced, or that deleting is irreversible. Some behavioral detail appears in the parameter descriptions, but the main description does not carry the burden for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no fluff and front-loads concrete capabilities. The trailing phrase 'or manage calendar events' is redundant and generic, preventing a 5, but the overall text is concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 20 parameters, 9 operations, and no output schema, yet the schema parameter descriptions cover almost all invocation concerns: per-operation behavior, default calendars, shared-calendar requirements, patch semantics, and availability ranges. The top-level description is thin, but the definition as a whole is sufficiently complete for an agent to select and call the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 20 parameters in detail. The description text adds no parameter-level meaning, meeting the baseline for high coverage. The schema's own descriptions are unusually rich (e.g., allDay boundary handling, attendee replacement), but that is schema content, not description-added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (calendar events, agenda, availability) and gives concrete verbs: list, view, check, manage. It is not a mere tautology, though 'manage calendar events' is broad and duplicates the tool name rather than enumerating the create/update/delete operations explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool instead of alternatives such as manage_meet or manage_tasks, but the calendar resource and availability/agenda wording imply its scope. The operation parameter descriptions provide detailed internal routing (e.g., use 'calendars' to discover IDs, 'agenda' for shared calendars), so usage guidance is partially covered within the schema rather than the top-level description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_contactsA

Search, read, create, update and delete Google Contacts: your saved contacts, the addresses you have corresponded with but never saved, and your organization's directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFull name, e.g. `Ada Lovelace`. Split into given and family name on the way in; a single word becomes the given name.
emailYesAccount email address
notesNoFree-text note stored on the contact
phoneNoPhone number, in whatever form you have it — Google normalizes it. On `update` this REPLACES every number the contact has — pass an empty string to clear them.
queryNoText to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody.
companyNoOrganization name
jobTitleNoJob title within the organization
contactIdNoPerson id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted.
operationYeslist: list your saved contacts | search: search your saved contacts by name, email, nickname or phone | get: get one person in full — addresses, birthday, notes, relations | create: create a new contact | update: change an existing contact (only the fields you pass; pass an empty string to clear one) | delete: delete a contact | listOther: list 'other contacts' — addresses you have corresponded with but never saved | searchOther: search 'other contacts' by name or email | listDirectory: list people in your organization's directory (Workspace accounts only) | searchDirectory: search your organization's directory by name or email (Workspace accounts only)
pageTokenNoContinue from where a previous page stopped — pass the token that response printed
sortOrderNoOrder for `list` — by first name, by last name, or most recently changed first
maxResultsNoMax people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else.
contactEmailNoThe contact's email address. (`email` is the account making the call, not the person being saved.) On `update` this REPLACES every address the contact has — pass an empty string to clear them.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It does convey the high-level mutability (create/update/delete) and the meaningful scope of 'addresses you have corresponded with but never saved' and 'organization's directory.' However, it does not disclose important behavioral traits such as update replacing existing phone/email values, directory operations being Workspace-only, or pagination behavior; some of this is delegated to schema property descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the action verbs and uses a colon to enumerate the three data scopes. Every word earns its place, and there is no redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 parameters, 10 operations, and no output schema, the description provides a solid orientation while the rich input schema carries the operational detail. The only notable gap is that return-value structure is not described anywhere, but it is not heavily needed given the schema's references to pagination tokens and printed ids.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 even though the main description contributes no parameter-level meaning. The schema descriptions themselves are detailed and clarify subtle distinctions like `email` being the account email versus `contactEmail` being the contact's email, which is valuable. The description adds no extra parameter context beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb set — search, read, create, update, delete — tied to Google Contacts, and then distinguishes three data scopes: saved contacts, unsaved 'other contacts', and the organization directory. This makes the tool's purpose unmistakable and clearly separates it from sibling domain tools like manage_calendar or manage_email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when the tool applies by naming the resource and the three contact scopes it covers. It does not explicitly state when not to use it or name alternatives, but the sibling tools cover different domains, so ambiguity is low.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_docsC

Read, write, insert, and find-replace text in Google Docs documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoText to write (plain text) — appended to the end by write, inserted at `index` by insertText
emailYesAccount email address
indexNoCharacter index to insert at (1 = start of the tab's body)
tabIdNoTab to act on — a tabId from a previous get's tabIndex. Scopes the read on get; targets the edit on write/insertText/replaceText, which act on the FIRST tab when it is omitted (replaceText spans every tab). Character indices are per-tab.
titleNoDocument title (default: 'Untitled document')
findTextNoText to find
matchCaseNoCase-sensitive match (default: true)
operationYesget: get document content and metadata | create: create a new document | write: append text to the end of a document | insertText: insert text at a specific position in a document | replaceText: find and replace text in a document
documentIdNoDocument ID
replaceWithNoReplacement text

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it only names the operations. Critical mutation traits are absent: write appends rather than overwrites, edits without tabId target the FIRST tab while replaceText spans every tab, character indices are per-tab, and an email is required for authentication. These nuances exist in the schema's parameter text, not in the tool description, so the agent gets no behavioral warning before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A 12-word single sentence with no wasted words, and the verb list is front-loaded so the agent immediately knows the operation families. However, the brevity veers toward under-specification; it reads as a tagline rather than a specification, which is acceptable for conciseness but shifts substance burdens to other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a five-operation, 10-parameter, mutation-heavy tool with no annotations and no output schema, yet it gets only a one-line summary. The schema compensates with detailed operation and parameter text, but the tool-level description still omits what get returns, create's default behaviors, per-tab indexing pitfalls, and auth expectations. Not complete enough for an agent to select and call it correctly without deep schema parsing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with strong per-parameter descriptions (tabId explains first-tab targeting, operation explains each enum value, text explains append vs insert semantics), so the baseline of 3 applies. The tool description itself adds zero parameter meaning, but the schema carries the load thoroughly, so no penalty beyond baseline is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific verbs (read, write, insert, find-replace) and a concrete resource (Google Docs documents), making the tool's domain unmistakable and distinct from siblings like manage_sheets or manage_tasks. It does not differentiate at the operation level, but the operation enum in the schema fills that role. The one-line headline is accurate, if minimal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Nowhere does the description say when to choose manage_docs over siblings such as manage_drive or manage_sheets, nor does it give selection criteria among the five internal operations. The schema's operation descriptions explain mechanics (append, insert, replace) but offer no when-to-use or when-not-to-use guidance. An agent must infer the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_driveB

Search, upload, download, share, comment on, or manage files in Google Drive.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFile name in Drive. On `upload`, defaults to the local file's name. On `copy`, the name for the copy — without it Drive names it 'Copy of <original>'. On `update`, the new name (a rename). On `createFolder`, the folder name.
roleNoPermission level. On `share`, the level to grant — defaults to `reader`. On `setRole`, the new level, and it is REQUIRED there: with no default to fall back on, an omitted role would silently demote the collaborator, and setRole sends no notification.
typeNoPermission type (default: 'user'). Use 'group' for Google Groups, 'domain' to share with an entire G Suite domain, 'anyone' for public links.
emailYesAccount email address
queryNoDrive search query (e.g. "name contains 'budget'" or "mimeType='application/pdf'")
domainNoDomain name (required when type is 'domain').
fileIdNoFile ID
contentNoComment text. On `replyToComment`, the reply text.
filePathNoLocal file path to upload
folderIdNoFolder ID (pass the id returned by createFolder or search)
maxDepthNoHow many folder levels to descend (default 10). The tree is labelled partial when this limit stops the walk.
mimeTypeNoTarget format (e.g. application/pdf, text/csv, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document)
resolvedNotrue to resolve, false to reopen
commentIdNoComment ID
operationYessearch: find files by query | get: get file metadata | upload: upload a local file to Drive | viewImage: view an image file inline without saving to workspace (png, jpg, gif, webp). Use for quick preview — use download to save. | download: download file content to local path | copy: create a copy of a file (set name to rename the copy; parentFolderId to place it in a folder) | update: rename a file (set name) and/or move it between folders (addParents / removeParents — to move, set both) | delete: permanently delete a file (cannot be undone) | trash: move a file or folder to trash (recoverable for 30 days — use instead of delete when you only need to remove it) | export: export a Google Workspace document (Docs, Sheets, Slides) to a file format | createFolder: create a new folder (optionally nested under a parent folder) | listFolder: list the files and subfolders directly inside a folder | tree: print a recursive folder tree and count the files (subfolders excluded from the count) | listPermissions: list sharing permissions on a file | share: share a file with a user, group, domain, or anyone | unshare: remove sharing permission from a file | setRole: change an existing collaborator's role (no notification email is sent) | listComments: list comments on a file | getComment: get a specific comment by ID | addComment: add a comment to a file (optionally anchored to quoted text) | resolveComment: resolve or reopen a comment | replyToComment: reply to an existing comment
addParentsNoComma-separated folder ID(s) to add as parents (move into a folder)
maxResultsNoMax results (default: 10, max: 50)
outputPathNoLocal path to save the file
quotedTextNoText to anchor the comment to (optional — if provided, comment is anchored to first occurrence)
shareEmailNoEmail address of the collaborator. On `share`, required when type is 'user' or 'group'; omit for 'domain' (use the `domain` param) or 'anyone'. On `setRole`, the existing collaborator whose role to change.
permissionIdNoPermission ID to remove (from listPermissions)
removeParentsNoComma-separated folder ID(s) to remove as parents (move out of a folder)
includeDeletedNoInclude deleted comments (default: false)
parentFolderIdNoDestination folder ID. On `upload`, places the file in this folder. On `copy`, defaults to the source file's folder. On `createFolder`, nests the new folder under this parent.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description alone does not disclose side effects such as permanent deletes, 30-day trash recovery, missing setRole notifications, or partial tree results. Those traits are documented in the schema's operation enum, which mitigates the transparency gap, but the description field itself carries little behavioral weight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with a clear verb series and no significant waste. The final 'or manage files' is somewhat redundant and vague, but overall the length is appropriate given that the schema carries the detailed operational semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 24-parameter tool with no output schema and no annotations, a high-level verb list is not fully complete on its own; the agent must rely on the schema's extensive operation enum to understand per-operation behavior and outputs. The schema is rich enough to make the definition usable, but the description leaves the tool's full behavioral surface to be discovered elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 24 parameters, including operation-specific meanings, defaults, and required conditions. The description adds no parameter-level meaning, so the baseline of 3 applies even though it does not compensate for anything.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description lists specific actions (search, upload, download, share, comment) and names Google Drive as the resource, so an agent can tell this is a Drive file-management tool. It lacks explicit differentiation from siblings like manage_docs or manage_sheets, and the trailing 'or manage files' is generic, so it is a clear but not exceptional purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The Google Drive scope and operation list imply when this tool is useful, but the description gives no explicit when-to-use or when-not-to-use guidance and never names alternatives. The useful operational tips (viewImage vs download, trash vs delete, setRole no-notification) live in the schema's operation enum rather than in the description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_emailA

Search, read, send, forward, or manage emails in a Google Workspace account. Supports Gmail search syntax.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC email(s), comma-separated. On `replyAll` these are ADDITIONAL — they do not replace the recipients already on the thread.
toNoRecipient email(s), comma-separated
bccNoBCC email(s), comma-separated
bodyNoEmail body text. On `forward`, an optional note prepended ABOVE the forwarded message.
fromNoSender email or RFC 2822 mailbox for a verified Gmail Send As alias
htmlNoTreat body as HTML content (default: plain text)
draftNoSave as draft instead of sending (default: false, forced true when attachments present)
emailYesAccount email address
queryNoGmail search query (e.g. "from:alice subject:meeting has:attachment")
subjectNoEmail subject line
filenameNoAttachment filename, exactly as it appears in the `read` response (e.g. 'invoice_template.md')
threadIdNoThread ID to retrieve
messageIdNoEmail message ID
operationYessearch: find emails by query | read: get full email by ID. Pass bodyFormat: 'html' when the plain-text part is a stub (marketing email, invitations, booking confirmations) and the dates/codes you need only exist in the HTML — returned HTML is sanitized and wrapped in a Spotlighting block (ADR-305). | archive: save an email's headers and body to a markdown file in the workspace — a LOCAL archive, not Gmail's 'remove from inbox' (attachments are listed, not downloaded) | send: compose and send a new email (creates draft when attachments present, 35MB attachment limit via upload endpoint) | reply: reply to a message (thread-aware, creates draft when attachments present) | replyAll: reply-all to a message (thread-aware, includes all recipients, creates draft when attachments present) | forward: forward a message to new recipients (includes original attachments by default) | triage: unread inbox summary (sender, subject, date) | trash: move a message to trash | untrash: restore a message from trash | getAttachment: download an email attachment to workspace directory (use read first to see attachment list) | viewAttachment: view an image attachment inline without saving to workspace (png, jpg, gif, webp). Use for quick preview — use getAttachment to save. | modify: add or remove labels on a message (e.g. archive, mark read/unread) | labels: list all labels in the mailbox | threads: list email threads by query | getThread: get all messages in a thread
bodyFormatNoHow to render the message body. 'plain' (default) returns text/plain or a crude HTML-strip fallback. 'html' returns the text/html part sanitized — useful when the plain-text part is empty/stub.
maxResultsNoMax results (default: 10, max: 50)
outputPathNoLocal path to save the markdown file (workspace-relative; defaults to a slug from the message date and subject)
addLabelIdsNoComma-separated label IDs to add (e.g. STARRED, IMPORTANT, Label_123)
attachmentsNoWorkspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present.
removeLabelIdsNoComma-separated label IDs to remove (e.g. UNREAD, INBOX to archive)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses meaningful behavioral details: returned HTML is sanitized and wrapped in a Spotlighting block, archive saves locally without downloading attachments, attachments force draft mode, uploads are capped at 35MB, forward includes original attachments, and replyAll treats cc as additional recipients. This is unusually transparent for an email tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The tool description is a single front-loaded sentence naming the resource, major actions, and search syntax support. The operation enum descriptions are long, but each clause is operation-specific and earns its place across 16 distinct operations, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high complexity — 20 parameters, 16 operations, no annotations, and no output schema — the description is substantially complete. It covers operation behaviors, attachment handling, draft behavior, and limits. It falls just short of fully complete because return shapes for operations like search, labels, and threads are not described, and no auth/account prerequisites are stated beyond the required email parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the schema already documents all 20 parameters. The tool-level description adds no parameter-level semantics. The operation enum clarifies behavior, but that detail is part of the schema rather than something the description contributes beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with explicit actions on a concrete resource: 'Search, read, send, forward, or manage emails in a Google Workspace account.' It also adds a distinguishing capability, Gmail search syntax support. Sibling tools are calendar/drive/tasks, so this is unambiguously the email tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The operation enum provides detailed routing guidance: read says to pass bodyFormat 'html' when the plain-text part is a stub; viewAttachment says use it for quick preview and use getAttachment to save; archive clarifies it is a local archive, not Gmail's remove-from-inbox. This gives the agent explicit context for choosing among operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_meetB

Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes. Requires Workspace Business Standard+ for transcripts/recordings.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesAccount email address
spaceNoMeeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name
filterNoEBNF filter. On `listConferences`, e.g. 'space.meeting_code = "abc-mnop-xyz"' or 'start_time>="2026-01-01T00:00:00Z"'. On `listParticipants`, e.g. 'latest_end_time IS NULL' for active participants.
operationYeslistConferences: list recent meeting conferences (default: descending by start time) | getConference: get details of a specific conference | listParticipants: list who attended a conference | listTranscripts: list transcripts for a conference (requires Workspace Business Standard+) | getTranscript: get transcript metadata including Google Docs destination | listTranscriptEntries: get structured transcript text — who said what, with timestamps | listRecordings: list recordings for a conference (saved as MP4 in Drive) | getRecording: get recording metadata including Drive file ID and playback link | getFullTranscript: get the full who-said-what transcript for a conference (chains transcripts + entries + participant names automatically). Use pageToken to continue reading. | listSmartNotes: list Gemini-generated smart notes for a conference | getSmartNote: get smart note metadata including Google Docs destination | createSpace: create a standalone Google Meet link (not attached to a calendar event) | activeConferences: list conferences happening RIGHT NOW across your meetings | getSpace: look up a meeting space by its meeting code or resource name | updateSpace: change who can join a meeting space, or turn host controls on or off | endActiveConference: end the call happening in a space right now, disconnecting everyone in it
pageTokenNoPage token from a previous getFullTranscript call to continue reading
accessTypeNoWho can join without knocking. OPEN: anyone with the link. TRUSTED (default): people in your organization, plus invited guests. RESTRICTED: invited guests only.
maxResultsNoMax results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is 10; this tool raises it.)
moderationNoTurn on host controls — the host admits guests and manages who can present or chat.
conferenceIdNoConference record ID (from `listConferences`)
recordingNameNoRecording resource name (from listRecordings)
smartNoteNameNoSmart note resource name (from listSmartNotes)
transcriptNameNoTranscript resource name (from `listTranscripts`, e.g. conferenceRecords/.../transcripts/...)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it adds one useful behavioral fact (Workspace Business Standard+ required for transcripts/recordings) but otherwise frames the tool as read-only. It does not disclose that operations like updateSpace and endActiveConference mutate or terminate live meetings, which is material behavior for an agent to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Both sentences earn their place and front-load the domain plus the license caveat. It is compact and free of filler, though the brevity contributes to under-specifying active-management capabilities.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-operation tool with 12 parameters, no output schema, and no annotations, two sentences about browsing and licensing are insufficient. The definition omits entire categories of behavior, such as active conferences, creating/updating spaces, and ending calls, and gives no account of mutation effects or required permissions. The rich operation enum in the schema compensates only partially.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions and detailed enum explanations, so the baseline is 3. The prose description adds only the licensing constraint tied to transcripts/recordings, not parameter-level semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The core read/browse function is explicit: 'Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes,' and 'Google Meet' clearly distinguishes this from sibling tools. However, the description understates the full operation set, which also includes createSpace, updateSpace, and endActiveConference, so the purpose is not fully represented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context for historical reads and a hard licensing prerequisite for transcripts/recordings, so an agent can infer when browsing Meet data is appropriate. It offers no guidance about when to prefer this over sibling tools or when to use the mutation operations, leaving that entirely to the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_scratchpadA

Compose, edit, and deliver text content. Use for any multi-line content: emails, documents, descriptions. Compose in the scratchpad, edit by line or JSON path, attach files, then send to any target. For short one-liners, use the service tool directly instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
keepNoFor send: keep scratchpad after successful send (default: true)
pathNoFor json_* ops: JSON path (e.g., $.config.name, $.items[0].value)
labelNoFor create: optional human-readable label
refIdNoFor detach: attachment reference ID (att-1, att-2, etc.)
valueNoFor json_set, json_insert: value to set or insert (any JSON type)
fileIdNoFor attach (drive source): Drive file ID
formatNoFor create: content format (default: text). Controls validation and addressing mode.
sourceNoFor attach: file source (workspace or drive). For import: resource type (doc, email, sheet, drive_file).
targetNoFor send: delivery target
contentNoText content. For create (pre-fill), insert_lines, append_lines, replace_lines.
endLineNoEnd of line range (inclusive). For replace_lines, remove_lines, copy_lines, view.
filenameNoFor attach (workspace source): filename in workspace
afterLineNoInsert after this line number (0 = prepend). For insert_lines, copy_lines, attach.
operationYescreate: new buffer | view: show content | discard: free buffer | list: show all | insert_lines/append_lines/replace_lines/remove_lines: line editing | copy_lines: copy from another scratchpad | json_get/json_set/json_delete/json_insert: path-addressed JSON editing | attach/detach: file references | import: load from Google Workspace resource | send: deliver to target
startLineNoStart of line range (1-based). For replace_lines, remove_lines, copy_lines, view.
scratchpadIdNoScratchpad ID (sp-XXXX). Required for all operations except create and list.
sourceParamsNoFor import: source-specific parameters (e.g., { documentId, mode } for doc, { messageId } for email)
targetParamsNoFor send: target-specific parameters (e.g., { email, to, subject } for email, { filename } for workspace)
fromScratchpadIdNoFor copy_lines: source scratchpad ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It usefully states the workflow: compose, edit by line or JSON path, attach files, and send to any target. However, it does not disclose side effects, irreversibility of sends, lifecycle/destruction of scratchpads, auth requirements, or error behavior, so important behavioral context is left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: purpose, workflow, and a functional exclusion. Every sentence earns its place, the main payload is front-loaded, and there is no fluff or repetition that wastes an agent's context window.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter tool with 17 operations and no output schema, the description supplies a clear mental model that the schema cannot provide, and the schema supplies the per-operation and per-parameter detail. The main gap is that the generic 'service tool' alternative is not mapped to a concrete sibling, and import/copy/list/discard aspects are only discoverable from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 19 parameters. The description adds a useful high-level grouping (line editing, JSON path, attachment, delivery) but does not add syntactic or semantic detail beyond what the parameter descriptions already provide; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as composing, editing, and delivering multi-line text content, and ties it to a distinct scratchpad workflow (edit by line/JSON path, attach, send). It does not explicitly differentiate among the named sibling tools beyond pointing to a generic 'service tool', so it misses the strongest sibling-differentiation credit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-to-use signal ('any multi-line content: emails, documents, descriptions') and an explicit when-not-to-use signal ('short one-liners... use the service tool directly'). The alternative is named only generically, not tied to a specific sibling, which is a partial gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_sheetsB

Read, write, and manage Google Sheets spreadsheets.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesAccount email address
indexNoPosition among tabs (0-based). Appended at the end if omitted.
rangeNoA1 notation range (e.g. 'Sheet1!A1:D10', or just 'Sheet1' for a whole tab). On `append`, the target tab — defaults to 'Sheet1'; use 'MyTab' or 'MyTab!A:Z' to append to a specific one.
titleNoOn `create`, the spreadsheet title (defaults to 'Untitled spreadsheet'); on `renameSpreadsheet`, its new title. On `addSheet`, the name of the new TAB; on `renameSheet`, that tab's new title; on `duplicateSheet`, the name for the copy (defaults to 'Copy of <source>').
valuesNoComma-separated values for a single row (e.g. 'Alice,100,true')
sheetIdNoSheet ID of the tab, from `manage_sheets get`. On `duplicateSheet` and `copySheetTo`, the SOURCE tab to copy.
rowCountNoInitial row count (default 1000)
operationYesget: get spreadsheet metadata and sheet names | create: create a new spreadsheet (optionally with a title) | read: read cell values from a range; rendered rows are prefixed with their sheet row number (e.g. 'R3: …') since blank rows are otherwise invisible | append: append rows to a spreadsheet (rows land after the last row of existing data in the target range) | getValues: get values from a specific range (raw API); rendered rows are prefixed with their sheet row number (e.g. 'R3: …') | updateValues: write values to a specific range | clearValues: clear cell values from a range (structure preserved) | addSheet: add a new tab (sheet) to the spreadsheet | renameSheet: rename a tab (sheet) within a spreadsheet | deleteSheet: delete a tab (sheet) from the spreadsheet — irreversible | duplicateSheet: duplicate a tab within the same spreadsheet | renameSpreadsheet: rename the spreadsheet (the document title, not a tab) | copySheetTo: copy a tab from this spreadsheet into another spreadsheet
jsonValuesNoJSON 2D array of rows (e.g. '[["a","b"],["c","d"]]'). Use for bulk and multi-row writes.
columnCountNoInitial column count (default 26)
spreadsheetIdNoSpreadsheet ID. On `copySheetTo`, the SOURCE spreadsheet.
valueInputOptionNoHow input is interpreted: USER_ENTERED (default, parses formulas/types) or RAW
destinationSpreadsheetIdNoDestination spreadsheet ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, but 'read, write, and manage' only vaguely signals mutation. It does not mention side effects, irreversibility like deleteSheet, creation behavior, or output shape; those details appear later in the schema but are absent from the description itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and every word earns its place. It is appropriately terse given the schema's rich parameter and operation documentation, though it offers no structured guidance for the many operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema is rich and covers all parameters and operation semantics, so the generic description is not fatal. However, with no output schema and no usage direction beyond 'Google Sheets,' an agent must rely almost entirely on the schema to understand call patterns, operation selection, and expected results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter has a detailed description, so the baseline is 3. The tool description adds no parameter-level meaning beyond identifying the domain, but the schema fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description, 'Read, write, and manage Google Sheets spreadsheets,' names a specific resource and clear high-level verbs. It distinguishes the tool from sibling manage_* tools by explicitly targeting Google Sheets, though it does not enumerate the 13 operations or contrast directly with tools like manage_docs or manage_drive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is implied by the resource phrase 'Google Sheets spreadsheets,' which gives basic context among the manage_* sibling suite. There is no explicit when-to-use/when-not-to-use guidance, and no alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_tasksC

Manage task lists and tasks in Google Tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
dueNoDue date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time)
emailYesAccount email address
notesNoTask notes / details
titleNoOn `createTaskList`, the task list name. On `create` and `update`, the task title.
statusNoTask status
taskIdNoTask ID
operationYeslistTaskLists: list all task lists | getTaskList: get a task list by ID | createTaskList: create a new task list | deleteTaskList: delete a task list and all its tasks | list: list tasks in a task list | get: get a specific task | create: create a new task | update: update a task (patch semantics — only the fields you pass are changed) | complete: mark a task as completed | delete: delete a task
maxResultsNoMax tasks to return (default: 20, max: 100)
taskListIdNoTask list ID (use `listTaskLists` to find)
showCompletedNoInclude completed tasks (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. 'Manage' implies mutation and side effects but does not state that deletions are destructive, updates use patch semantics, or that operations may permanently remove tasks. The schema's operation descriptions contain some of this, but the description itself does not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler or redundant content. It is front-loaded with the domain and resource type, though it may be too terse to be fully useful on its own, the conciseness itself is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 10 parameters, 10 distinct operations, no annotations, and no output schema. A one-sentence overview is insufficient context for an agent to safely select and invoke operations, understand return values, or know prerequisites. The description leaves substantial gaps that the schema alone only partially fills.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter in detail, including enum meanings, defaults, and special notes like due-date storage. The description adds no parameter-level meaning beyond what the schema provides, which matches the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource domain — 'task lists and tasks in Google Tasks' — which distinguishes it from sibling tools like manage_calendar or manage_drive. The verb 'Manage' is generic, but the object is clear enough for an agent to identify the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, when not to use it, or which operation to choose in a given situation. The operation enum does provide choices, but the description itself offers no selection criteria or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_workspaceB

Manage files and directories in the workspace sandbox. Supports nested paths (e.g. "reports/q1/summary.csv"). The workspace is the exchange point for file operations (attachments, downloads, exports).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path (for list: scope to subdirectory, for mkdir: directory to create)
sourceNoSource path (for move)
contentNoFile content to write (for write)
filenameNoFile path, may include directories (for read, write, delete, compress, decompress). E.g. "reports/q1/summary.csv"
operationYeslist: show files (recursive) | read: get file content | write: save content to file | delete: remove file or directory | move: move or rename a file/directory | mkdir: create a directory | compress: gzip a file | decompress: gunzip a file
destinationNoDestination path (for move, compress, decompress). Defaults to filename.gz for compress, strips .gz for decompress.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral disclosure. It only mentions nested-path support and the file-exchange context. It does not disclose that operations like delete, move, or write are mutating or potentially destructive, nor any overwrite semantics, irreversibility, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler: purpose, path capability, and integration context are each stated once and front-loaded. The example path 'reports/q1/summary.csv' is concrete and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The workspace-scope and nested-path context combine well with a high-coverage schema that spells out operations and defaults. However, with no annotations and no output schema, the description leaves destructive-operation caveats, expected return shapes, and path-boundary limits implicit, making it adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters and explains each operation enum value and destination default. The description adds the nested-path convention and workspace role, but this is contextual rather than necessary parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Manage files and directories in the workspace sandbox,' naming a concrete resource and scope that separates it from siblings like manage_drive or manage_docs. The nested-path example further clarifies the file-operation role. 'Manage' is somewhat broad, but the schema's operation enum removes ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says the workspace is 'the exchange point for file operations (attachments, downloads, exports),' which implies use when exchanging files with the workspace. However, it does not explicitly state when to prefer this over alternatives such as manage_drive, nor does it mention exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

queue_operationsA

RENAMED to bulk_operations, which does the same thing. This name still works and will be removed in a future release. Do many things in one call, two ways. mode:'queue' (default) runs different operations in sequence, chaining results with $N.field — works for every tool. mode:'batch' does ONE operation across many resources in a single Google request — far fewer round trips, but only where Google publishes a batch method.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoqueue (default): N operations, N API calls, in order, with $N.field references between them. batch: ONE operation across many resources in a single API call — no $N references, because there is no 'between'.
toolNobatch only — the tool to call, e.g. 'manage_contacts'.
emailNobatch only — the account to act as.
itemsNobatch only — one entry per resource. A bare id string is enough when that is all that differs, e.g. ['people/c1', 'people/c2']; use objects when items carry more, e.g. [{name: 'Ada Lovelace', contactEmail: 'ada@example.com'}]. Anything shared by the WHOLE batch — labels to add, a field mask — goes at the top level of this call, not in here.
detailNosummary: one-line status per operation (default) | full: include complete output from each operation
operationNobatch only — the operation to apply to every item, e.g. 'delete'. Ask for one that cannot batch and the error names the ones that can.
operationsNoOperations to execute sequentially

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the two execution modes, the default mode, result chaining with $N.field, and the deprecation status. However, it does not mention potential side effects, permissions required, or what the operation result/return shape looks like, which are relevant for a tool that can execute arbitrary operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the most important information: the rename and deprecation. Each sentence earns its place by explaining mode selection, sequencing, chaining, and batch limitations without repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with seven parameters, two modes, and no output schema, the description covers the core decision points: mode choice, chaining mechanics, batch constraints, and deprecation. The parameter schema fills the remaining details. It is slightly incomplete only because it does not discuss output/return behavior or authorization/side-effect considerations, but overall it is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The text adds meaningful context beyond the schema by explaining that 'queue' works for every tool, that 'batch' is beneficial due to fewer round trips but only where batch methods exist, and that $N.field references chain results. This goes beyond the enum descriptions in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool does many things in one call and explains the two modes ('queue' and 'batch'). It also identifies this as a deprecated alias of 'bulk_operations', which gives the agent a concrete point of reference, though it does not distinguish itself from that sibling because it is the same tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use each mode: 'queue' for sequential operations with chaining, 'batch' for one operation across many resources with fewer round trips. It also warns that batch is only available where Google publishes a batch method, and it tells the agent the preferred alternative name is 'bulk_operations' since this name will be removed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.5/5.0
Disambiguation4/5

Most tools map cleanup to a distinct Google Workspace service, but queue_operations is a direct duplicate/alias of bulk_operations, and manage_workspace vs manage_drive could require careful reading. Descriptions are strong enough to resolve most ambiguity.

Naming Consistency4/5

The dominant manage_<service> pattern is clear and consistent across Calendar, Drive, Email, Docs, Sheets, Tasks, etc. bulk_operations and queue_operations break that prefix pattern but are internally consistent; the deprecated queue_operations alias is a minor naming inconsistency.

Tool Count4/5

13 tools is well within the ideal range for a multi-service Workspace server and the breadth is justified. The redundant queue_operations alias makes the count slightly less clean than it could be.

Completeness4/5

The set covers core CRUD/lifecycle workflows for Calendar, Drive, Email, Contacts, Docs, Sheets, and Tasks, plus Meet viewing and account management. Obvious gaps remain for other Workspace apps like Slides, Forms, or Chat, but common workflows are well supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to securely manage Google Workspace services (Gmail, Calendar, Drive, Sheets, Contacts) with persistent multi-account OAuth. Uses OS keychain for credential storage with health monitoring and granular business rules for enterprise security.
  • A
    license
    B
    quality
    D
    maintenance
    Multi-account Google MCP server providing read access to Gmail and Calendar via stdio. Supports secure authentication for personal and work accounts with OAuth and keychain token storage.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language control over Google Workspace (Gmail, Drive, Calendar, Sheets, Slides, Tasks) through secure OAuth 2.1 authentication, with vault-level security and multi-user isolation.
    225
    7
    The Unlicense

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/aaronsb/google-workspace-mcp'

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