Skip to main content
Glama

Google Workspace MCP

Python MCP server for reading Google Docs, Google Sheets, and Google Chat with structured output and better image handling.

What It Does

  • Reads Google Docs as structured JSON with paragraphs, tables, inline objects, positioned objects, and image metadata.

  • Reads Google Sheets values, grid data, formulas, notes, hyperlinks, and chip runs.

  • Lists Google Chat spaces, space members, and messages as structured JSON.

  • Preserves partial text styling in Sheets cells via text_runs and an annotated_text helper field for segments such as strikethrough and underline.

  • Extracts over-grid sheet images from Drive export -> XLSX.

  • Detects in-cell IMAGE("...") formulas separately from drawing exports.

Related MCP server: Google Docs & Drive MCP Server

Project Layout

google_workspace_mcp/
  chat.py       # Google Chat normalization helpers
  cli.py        # command-line entrypoint
  client.py     # Google API auth + HTTP client
  common.py     # shared constants and parsing helpers
  docs.py       # Google Docs normalization helpers
  server.py     # FastMCP server instance
  sheets.py     # Google Sheets normalization helpers
  tools.py      # MCP tool definitions
mcp_google_workspace.py  # compatibility wrapper for local scripts/config
tests/

Quick Start

Install from GitHub

pip install "git+https://github.com/NgoQuocViet2001/google-workspace-mcp.git"

The most reliable way to run it across platforms is:

python -m google_workspace_mcp

If your Python Scripts directory is already on PATH, this shorter launcher works too:

google-workspace-mcp

Login OAuth quickly

  1. In Google Cloud, create an OAuth client ID with application type Desktop app.

  2. If the published package already includes a bundled OAuth desktop client, just run:

python -m google_workspace_mcp auth login

That opens the browser OAuth flow directly.

  1. If the package does not include a bundled OAuth client and no local OAuth client config exists yet, the CLI prompts once for:

    • Client ID

    • Client Secret

It then saves a reusable desktop-app client config at:

$HOME/.google-workspace-mcp/oauth-client-secret.json

and opens the browser OAuth flow automatically. After the first successful login, the cached token is stored at:

$HOME/.google-workspace-mcp/oauth-token.json

Other common commands

python -m google_workspace_mcp auth status
python -m google_workspace_mcp auth logout

CLI Commands

Use python -m google_workspace_mcp ... everywhere below. If google-workspace-mcp is already on PATH, the same commands also work with that shorter launcher.

  • python -m google_workspace_mcp

  • python -m google_workspace_mcp auth

  • python -m google_workspace_mcp auth login

  • python -m google_workspace_mcp auth login --client-secrets C:\path\to\oauth-client-secret.json

  • python -m google_workspace_mcp auth login --client-id <client-id> --client-secret <client-secret>

  • python -m google_workspace_mcp auth login --token-file C:\path\to\oauth-token.json

  • python -m google_workspace_mcp auth status

  • python -m google_workspace_mcp auth logout

Authentication Options

Use a Google OAuth client ID for Desktop App if the files are private but shared to your personal Google account.

If you want end users to be able to run python -m google_workspace_mcp auth login and jump straight into the browser OAuth flow with no extra setup, publish the package with a bundled desktop-app client at:

google_workspace_mcp/oauth-default-client.json

If no bundled client is shipped, the CLI falls back to prompting once for Client ID and Client Secret, or it can read them from a local JSON file.

  1. Enable:

    • Google Sheets API

    • Google Docs API

    • Google Drive API

    • Google Chat API

  2. Create an OAuth client ID with application type Desktop app.

  3. Choose one setup method:

    • Easiest: run python -m google_workspace_mcp auth login, paste the Client ID and Client Secret once, and let the CLI save them for future logins.

    • If you prefer files: download the client secret JSON. The downloaded filename is often something like client_secret_<id>.apps.googleusercontent.com.json.

  4. Optional file-based setup:

$HOME/.google-workspace-mcp/oauth-client-secret.json

Or set:

$env:GOOGLE_OAUTH_CLIENT_SECRETS_FILE="C:\path\to\oauth-client-secret.json"
  1. Run the one-time browser login flow:

python -m google_workspace_mcp auth

After the first successful login, the server automatically uses the cached OAuth token for private Docs, Sheets, Drive, and Google Chat calls. You do not need to provide a separate API key for that flow.

This stores a refreshable token by default at:

$HOME\.google-workspace-mcp\oauth-token.json

Use this to inspect the cached token scopes and see which scopes are still missing:

python -m google_workspace_mcp auth status

If auth status shows only drive.readonly, Sheets URLs that include gid and range can still be read through the server's Drive export fallback. That fallback returns values-oriented output and omits formulas, notes, hyperlinks, and rich text metadata until you re-run python -m google_workspace_mcp auth login with spreadsheets.readonly.

If you need to overwrite the cached token with a specific client secret file and token path, you can also run:

python -m google_workspace_mcp auth login --client-secrets C:\path\to\oauth-client-secret.json --token-file C:\path\to\oauth-token.json

If the desktop-app client JSON is already in $HOME/.google-workspace-mcp/, this shorter command also works:

python -m google_workspace_mcp auth login

When you log in with --client-secrets, or with --client-id plus --client-secret, the CLI also saves a reusable desktop-app client JSON into $HOME/.google-workspace-mcp/oauth-client-secret.json so future logins can omit the extra flags.

To delete the cached OAuth token later, run:

python -m google_workspace_mcp auth logout

If you separately configured GOOGLE_OAUTH_ACCESS_TOKEN, remove that environment variable from your shell or MCP config as well.

Use a Google Cloud service account for the most reliable setup.

  1. Enable:

    • Google Sheets API

    • Google Docs API

    • Google Drive API

    • Google Chat API if you plan to call the Chat tools with a user-scoped bearer token

  2. Create a service account key.

  3. Share the target Docs/Sheets files with the service account email.

  4. Set:

$env:GOOGLE_SERVICE_ACCOUNT_FILE="C:\path\to\service-account.json"

Public Sheets only: API key

Suitable for public Google Sheets reads. Not recommended for Docs or Drive export.

$env:GOOGLE_API_KEY="your_api_key"

Existing bearer token: OAuth access token

$env:GOOGLE_OAUTH_ACCESS_TOKEN="ya29...."

Installation

git clone https://github.com/NgoQuocViet2001/google-workspace-mcp.git
cd google-workspace-mcp
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt

Install from GitHub

Option 1: clone the repository

git clone https://github.com/NgoQuocViet2001/google-workspace-mcp.git
cd google-workspace-mcp
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt

Option 2: install directly from GitHub

pip install "git+https://github.com/NgoQuocViet2001/google-workspace-mcp.git"

After installing from GitHub, the most reliable way to run it is:

python -m google_workspace_mcp

This avoids PATH issues when pip installs console scripts into a user-site Scripts directory.

If your Python Scripts directory is already on PATH, the standalone command also works:

google-workspace-mcp

Running the Server

cd <path-to-repo>
.venv\Scripts\python.exe mcp_google_workspace.py

Or, if you installed it directly from GitHub:

python -m google_workspace_mcp

To bootstrap OAuth for a private user account:

python -m google_workspace_mcp auth

If your google-workspace-mcp launcher is already available on PATH, the equivalent shorter command is:

google-workspace-mcp auth login

To inspect the current auth setup:

python -m google_workspace_mcp auth status

To remove the cached OAuth login:

python -m google_workspace_mcp auth logout

Codex MCP Configuration

{
  "mcpServers": {
    "google-workspace": {
      "command": "<path-to-repo>/.venv/Scripts/python.exe",
      "args": ["<path-to-repo>/mcp_google_workspace.py"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS_FILE": "C:/path/to/oauth-client-secret.json",
        "GOOGLE_OAUTH_TOKEN_FILE": "C:/path/to/oauth-token.json"
      }
    }
  }
}

For public Sheets only, replace the env block with:

{
  "GOOGLE_API_KEY": "your_api_key"
}

If you installed the package directly from GitHub into an environment on your PATH, you can also use:

{
  "mcpServers": {
    "google-workspace": {
      "command": "google-workspace-mcp",
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS_FILE": "C:/path/to/oauth-client-secret.json",
        "GOOGLE_OAUTH_TOKEN_FILE": "C:/path/to/oauth-token.json"
      }
    }
  }
}

Available Tools

  • diagnose_google_auth

  • resolve_google_file

  • list_google_chat_spaces

  • get_google_chat_space

  • get_google_chat_message

  • read_google_chat_messages

  • read_google_chat_thread

  • list_google_chat_memberships

  • read_sheet_values

  • read_sheet_grid

  • get_sheet_row

  • search_sheet

  • sheet_to_json

  • inspect_sheet_images

  • read_google_doc

  • download_google_doc_images

  • export_google_file

Example Prompts

Replace placeholders such as <spreadsheet-id>, <sheet-name>, and <output-dir> with your own values.

Google Sheets URLs with gid and range are resolved automatically. If the caller omits the sheet prefix, the server uses the tab identified by gid.

Read one row from a sheet

get_sheet_row(
  "<spreadsheet-id>",
  "<sheet-name>",
  42,
  1
)

read_sheet_values also accepts row-style input such as <sheet-name>!42:42 and normalizes it to a valid full-row A1 range automatically.

Read directly from a Sheets URL with gid and range

read_sheet_values(
  "https://docs.google.com/spreadsheets/d/<spreadsheet-id>/edit?gid=<gid>#gid=<gid>&range=38:38"
)

When the cached OAuth token has drive.readonly but not spreadsheets.readonly, this still succeeds by exporting the addressed tab/range as CSV behind the scenes. The response includes source: "drive_export_csv_fallback" and an auth_warning so callers know richer grid metadata is unavailable.

read_sheet_grid(
  "<spreadsheet-id>",
  "<sheet-name>!A1:Z200"
)

For cells with partial formatting, read_sheet_grid() now includes:

  • text_runs: structured offsets plus style flags from Google Sheets

  • annotated_text: a plain-text helper string such as [[STRIKE]]old[[/STRIKE]] new

Search across a sheet

search_sheet(
  "<spreadsheet-id>",
  "login"
)

If you pass a Sheets URL with gid, search_sheet() searches only that tab by default instead of scanning the full workbook.

List Google Chat spaces

list_google_chat_spaces()

Read messages from a Google Chat space

read_google_chat_messages() accepts either a resource name like spaces/AAAA... or a Chat UI URL that contains the space id.

read_google_chat_messages(
  "spaces/AAAA1234567",
  50,
  null,
  null,
  "DESC",
  false
)

Read one Google Chat thread from a thread URL

read_google_chat_thread() accepts either a thread resource like spaces/<space>/threads/<thread> or a Chat UI URL like https://chat.google.com/room/<space>/<thread>/<message>.

read_google_chat_thread(
  "https://chat.google.com/room/AAQAyxdRoZo/jVIpmenXnO0/WNSdv6IyQf0?cls=10"
)

When the URL includes a message ID, the response includes both:

  • linked_message: the exact message referenced by the link

  • root_message: the first message in the thread

If Google Chat doesn't expose an API message resource that matches the URL token, the response sets linked_message to null and explains the limitation in linked_message_lookup_warning.

List members in a Google Chat space

list_google_chat_memberships(
  "spaces/AAAA1234567"
)

Convert a sheet to JSON

sheet_to_json(
  "<spreadsheet-id>",
  "<sheet-name>",
  1
)

Extract images from a sheet

inspect_sheet_images(
  "<spreadsheet-id>",
  "<sheet-name>",
  "C:/path/to/output/sheet-images"
)

Read a Google Doc with text and image metadata

read_google_doc(
  "https://docs.google.com/document/d/<doc-id>/edit",
  null,
  false,
  null
)

Download images from a Google Doc

download_google_doc_images(
  "https://docs.google.com/document/d/<doc-id>/edit",
  "C:/path/to/output/doc-images",
  null
)

Practical Limitations

  • Google Docs image metadata is available directly through the Docs API, so document extraction is strong.

  • Google Sheets does not expose over-grid images as cleanly as cell data, so this server uses XLSX export to recover them.

  • Google Chat reads require OAuth scopes such as chat.spaces.readonly, chat.messages.readonly, and chat.memberships.readonly. If your cached token is older, rerun python -m google_workspace_mcp auth login.

  • Google Chat API requests also require a configured Chat app in the same Google Cloud project. In Google Chat API > Configuration, fill in at least App name, Avatar URL, and Description, then save.

  • Google Chat room URLs always expose the space ID, and often work for thread reads, but the final URL token isn't guaranteed to be a spaces/{space}/messages/{message} API resource name. In those cases the server can still return the thread and root message, but not reliably resolve the exact linked reply through the Chat API alone.

  • Google Chat private user conversations are most reliable with OAuth user credentials. A plain service account usually needs a properly configured Chat app flow to access Chat resources.

  • In-cell IMAGE("...") formulas are detected separately from exported drawing images.

  • Private files shared to your user account should use the OAuth desktop client flow.

  • Private files shared to a robot identity should use a service account.

  • An API key is only suitable for public Sheets and can't read Google Chat.

  • drive.readonly alone is enough for the Sheets URL fallback described above, but Google Docs still require documents.readonly.

Available Tools

11 tools
diagnose_google_authB

Return a quick summary of the active Google authentication setup.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 full burden for behavioral disclosure. While 'Return a quick summary' implies a read-only operation, it doesn't specify what information the summary contains, whether it checks authentication validity or just configuration, potential error conditions, or any rate limits. For an authentication diagnostic tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a zero-parameter tool and front-loads the essential information. Every word earns its place in this concise formulation.

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?

Given that this tool has an output schema (which should document the return format), the description doesn't need to explain return values. However, for an authentication diagnostic tool with no annotations, the description should provide more context about what 'active Google authentication setup' means and what kind of summary to expect. The presence of an output schema helps, but the description remains somewhat minimal for this context.

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?

The tool has zero parameters, and schema description coverage is 100% (though empty). The description appropriately doesn't waste space discussing nonexistent parameters. Since there are no parameters to document, the baseline score of 4 is appropriate as the description doesn't need to compensate for any parameter documentation gaps.

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 purpose with a specific verb ('Return') and resource ('active Google authentication setup'), making it immediately understandable. However, it doesn't explicitly differentiate this authentication diagnostic tool from its sibling tools which are all focused on Google document/spreadsheet operations rather than authentication.

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?

The description provides no guidance about when to use this tool versus alternatives. It doesn't mention prerequisites (like needing authentication to be configured first), troubleshooting scenarios, or how this differs from other authentication-related tools that might exist. The agent receives no usage context beyond the basic purpose.

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

download_google_doc_imagesC

Download image objects from a Google Doc to a local folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_id_or_urlYes
output_dirNo
tab_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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. It states the action ('download') but doesn't cover permissions needed, rate limits, file formats supported, error handling, or whether it overwrites existing files. For a tool that likely involves file system operations and API calls, this leaves significant gaps in understanding its behavior.

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, efficient sentence that front-loads the core action and resource. It wastes no words and is appropriately sized for the tool's complexity, making it easy to parse quickly.

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?

Given the tool has an output schema (which likely covers return values), the description's job is reduced. However, with no annotations, 3 parameters (one undocumented due to 0% schema coverage), and operations involving downloads and file system changes, the description is incomplete. It should address more behavioral aspects like error cases or output specifics beyond what the output schema might provide.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'document_id_or_url' and 'output_dir' implicitly but doesn't explain what 'tab_id' does or provide details on parameter formats (e.g., URL patterns, directory paths). The description adds minimal value beyond the schema's property names, failing to fully address the coverage gap.

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 action ('download') and resource ('image objects from a Google Doc'), specifying the destination ('to a local folder'). It distinguishes from siblings like 'read_google_doc' or 'inspect_sheet_images' by focusing on downloading images rather than reading content or inspecting images in sheets. However, it doesn't explicitly differentiate from all siblings, such as 'export_google_file', which might handle similar operations.

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?

The description provides no guidance on when to use this tool versus alternatives like 'export_google_file' or 'inspect_sheet_images'. It lacks context on prerequisites (e.g., authentication), exclusions (e.g., not for text extraction), or specific scenarios (e.g., batch image extraction). Usage is implied by the action but not explicitly defined.

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

export_google_fileB

Export a Google Workspace file to PDF, XLSX, HTML zip, Markdown, or plain text.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_id_or_urlYes
mime_typeYes
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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. It implies a mutation (exporting changes format) but doesn't clarify if it modifies the original file, requires specific permissions, has rate limits, or what the output entails (e.g., file creation, download link). The description lacks details on error handling, performance, or side effects, leaving significant gaps for a tool with potential write 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 a single, efficient sentence that front-loads the core purpose without unnecessary words. It lists export formats clearly and avoids redundancy. Every part earns its place by specifying the action, resource, and target formats concisely.

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?

Given 3 parameters with 0% schema coverage, no annotations, and an output schema present, the description is moderately complete. It covers the basic purpose and formats but lacks details on usage, behavior, and parameter meanings. The output schema likely handles return values, reducing the need for output explanation, but the description doesn't fully address the tool's complexity and mutation aspects.

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 0%, so the schema provides no parameter details. The description adds minimal semantics by implying 'mime_type' relates to export formats (PDF, XLSX, etc.) and 'file_id_or_url' identifies the source, but doesn't explain parameter roles, formats, or constraints (e.g., valid MIME types, URL patterns). It partially compensates for the coverage gap but leaves parameters largely undocumented.

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 action ('Export') and resource ('Google Workspace file'), specifying the target formats (PDF, XLSX, HTML zip, Markdown, plain text). It distinguishes from siblings like 'read_google_doc' or 'download_google_doc_images' by focusing on format conversion rather than reading or downloading images. However, it doesn't explicitly differentiate from all siblings (e.g., 'sheet_to_json' also exports data).

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 on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., file accessibility, authentication), compare to siblings like 'read_google_doc' for viewing or 'sheet_to_json' for JSON export, or specify use cases (e.g., for archival, sharing in non-Google formats). The description only states what it does, not when it's appropriate.

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

get_sheet_rowC

Fetch one Google Sheets row and map it to the header row.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
sheet_nameYes
row_indexYes
header_rowNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 burden. It mentions mapping to header row but doesn't disclose behavioral traits like error handling (e.g., invalid row index), permissions needed, rate limits, or output format details. For a tool with no annotation coverage, this is a significant gap.

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?

Single sentence, zero waste, front-loaded with the core action. Every word earns its place by specifying the fetch operation and header mapping without unnecessary details.

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?

Given no annotations and 0% schema description coverage, but with an output schema present, the description is incomplete. It covers the basic purpose but lacks crucial context like parameter semantics and behavioral transparency. The output schema mitigates some gaps, but overall it's minimally adequate with clear deficiencies.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions mapping to header row, which relates to the 'header_row' parameter, but doesn't explain the meaning or usage of other parameters like spreadsheet_id_or_url, sheet_name, or row_index. The description adds minimal value beyond the bare 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 the action ('fetch') and resource ('one Google Sheets row'), and specifies the mapping to header row. It distinguishes from siblings like read_sheet_grid or read_sheet_values by focusing on single-row retrieval with header mapping, though not explicitly naming alternatives.

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 on when to use this tool versus alternatives like read_sheet_values or search_sheet. The description implies it's for fetching a specific row with header mapping, but lacks explicit context or exclusions for usage.

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

inspect_sheet_imagesB

Inspect Google Sheets images via XLSX export and detect IMAGE() formulas.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
sheet_nameNo
output_dirNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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 the full burden of behavioral disclosure. It mentions the method ('via XLSX export') and detection of 'IMAGE() formulas', but fails to describe critical behaviors: whether this is a read-only operation, if it modifies files, authentication requirements, rate limits, output format (though an output schema exists), or error handling. For a tool with no annotation coverage, this leaves significant gaps in understanding its operational traits.

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, efficient sentence that front-loads the core purpose without unnecessary details. Every word earns its place by specifying the action, target, and method concisely. There's no redundancy or fluff, making it easy to parse quickly.

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?

Given the tool's complexity (involving Google Sheets, XLSX export, and image/formula detection), no annotations, and an output schema (which mitigates the need to describe return values), the description is incomplete. It covers the 'what' but misses the 'how' and 'when'—lacking usage context, behavioral details, and parameter explanations. The presence of an output schema raises the baseline, but the gaps in other areas keep it at a minimal viable level.

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 description adds no parameter-specific information beyond what the input schema provides. With 0% schema description coverage, the three parameters (spreadsheet_id_or_url, sheet_name, output_dir) are undocumented in both the schema and description. The description implies context about inspecting images and formulas but doesn't explain how parameters relate to this, such as what 'output_dir' controls or if 'sheet_name' limits the inspection scope. Baseline 3 is appropriate as the schema does minimal work, and the description doesn't compensate.

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 purpose: 'Inspect Google Sheets images via XLSX export and detect IMAGE() formulas.' It specifies the verb ('inspect'), resource ('Google Sheets images'), and method ('via XLSX export'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'download_google_doc_images' or 'export_google_file', which could have overlapping functionality.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication, file access), use cases (e.g., analyzing embedded images vs. formulas), or exclusions (e.g., not for downloading images directly). With sibling tools like 'download_google_doc_images' and 'export_google_file', the lack of differentiation leaves the agent guessing about the appropriate context.

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

read_google_docB

Read a Google Doc as structured JSON with text, tables, and image metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_id_or_urlYes
tab_idNo
download_imagesNo
output_dirNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic operation. It doesn't disclose behavioral traits such as authentication needs, rate limits, error handling, or whether it's a read-only operation (implied but not explicit). The description doesn't add meaningful context beyond the basic function.

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, efficient sentence that front-loads the core purpose. Every word earns its place by specifying the action, target, and output format without unnecessary elaboration.

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?

Given the tool's moderate complexity (4 parameters, no annotations) and the presence of an output schema, the description is minimally adequate. It covers the basic purpose but lacks crucial context like authentication, error cases, or parameter usage. The output schema likely handles return values, but the description doesn't address behavioral or usage gaps.

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 0%, so the description must compensate but provides no parameter information. It doesn't explain what 'document_id_or_url' format is expected, what 'tab_id' refers to, or how 'download_images' and 'output_dir' interact. However, with 4 parameters and an output schema present, the baseline is 3 as the schema provides structure but no semantic context.

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 clearly states the specific action ('Read a Google Doc') and the output format ('as structured JSON with text, tables, and image metadata'). It distinguishes from siblings like 'export_google_file' or 'read_sheet_grid' by specifying it's for Google Docs with JSON output containing specific content types.

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 on when to use this tool versus alternatives. For example, it doesn't mention when to use 'read_google_doc' versus 'export_google_file' or 'download_google_doc_images', nor does it specify prerequisites like authentication or document access requirements.

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

read_sheet_gridC

Read Google Sheets grid data including formatted values, formulas, notes, and links.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
range_a1No

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states what data is read without behavioral details like permissions needed, rate limits, error handling, or output format. It mentions data types but lacks operational context.

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, efficient sentence with zero waste, front-loaded with the core action and key details. Every word earns its place without redundancy.

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?

Given complexity (read operation with 2 params, no annotations) and an output schema (which covers return values), the description is minimally adequate but incomplete. It specifies data types read but misses parameter guidance and behavioral context, leaving gaps for effective tool use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain 'spreadsheet_id_or_url' format, 'range_a1' syntax, or default behavior when range is null, leaving parameters undocumented.

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 verb ('Read') and resource ('Google Sheets grid data') with specific data types included (formatted values, formulas, notes, and links). It distinguishes from sibling 'read_sheet_values' by specifying richer data content, though not explicitly naming alternatives.

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 on when to use this tool versus alternatives like 'read_sheet_values' or 'sheet_to_json' is provided. The description implies usage for reading comprehensive sheet data but lacks explicit context or exclusions.

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

read_sheet_valuesC

Read raw Google Sheets values for an A1 range.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
range_a1No
major_dimensionNoROWS
value_render_optionNoFORMATTED_VALUE
date_time_render_optionNoSERIAL_NUMBER

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/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. It states this is a read operation ('Read raw Google Sheets values'), implying it's non-destructive, but doesn't mention authentication requirements, rate limits, error handling, or what 'raw values' entails. This leaves significant gaps for a tool with 5 parameters.

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, efficient sentence that gets straight to the point with no wasted words. It's appropriately sized for a tool with this complexity and is front-loaded with the core functionality.

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?

Given the tool has 5 parameters with 0% schema coverage and no annotations, the description is incomplete—it doesn't address parameter meanings or behavioral details. However, the presence of an output schema means the description doesn't need to explain return values, preventing a lower score. This is the minimum viable for a read operation with structured output.

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

Parameters1/5

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

The schema description coverage is 0%, meaning none of the 5 parameters have descriptions in the schema. The tool description adds no information about any parameters beyond implying 'range_a1' relates to 'A1 range'. It doesn't explain what 'spreadsheet_id_or_url', 'major_dimension', 'value_render_option', or 'date_time_render_option' mean or how to use them.

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 action ('Read raw Google Sheets values') and the resource ('for an A1 range'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'read_sheet_grid' or 'search_sheet', which likely have overlapping functionality, so it doesn't reach the highest score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'read_sheet_grid' or 'search_sheet'. It mentions 'raw values' and 'A1 range', but this is part of the purpose statement rather than explicit usage instructions. No context or exclusions are provided.

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

resolve_google_fileB

Resolve basic metadata for a Google Docs, Sheets, or Drive file.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_id_or_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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. It states the tool resolves 'basic metadata' but doesn't specify what that includes (e.g., file name, type, size, permissions), whether it requires authentication, if it has rate limits, or what happens with invalid inputs. This leaves significant gaps in understanding the tool's behavior.

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, clear sentence that efficiently conveys the core purpose without unnecessary words. It's front-loaded and appropriately sized for the tool's apparent simplicity, making it easy to parse quickly.

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?

Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is somewhat complete but lacks depth. It doesn't cover behavioral aspects like authentication needs or error handling, which are important for a tool interacting with external services like Google Drive, leaving room for improvement.

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 has 0% description coverage, but the description doesn't add any meaningful details about the parameter 'file_id_or_url'. It doesn't explain what formats are accepted (e.g., file ID vs. full URL), examples, or constraints. Since the parameter count is low (1), the baseline is 4, but the lack of compensation for the schema gap reduces the score to 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 clearly states the action ('resolve') and resource ('basic metadata for a Google Docs, Sheets, or Drive file'), making the purpose understandable. However, it doesn't distinguish this tool from potential sibling tools like 'inspect_sheet_images' or 'read_google_doc', which might also retrieve metadata, so it doesn't achieve full differentiation.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when it's appropriate (e.g., for quick metadata checks) or when not to use it (e.g., for detailed content access), nor does it refer to sibling tools like 'read_google_doc' or 'export_google_file' as alternatives for different needs.

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

search_sheetC

Search text across one sheet or all sheets and return matching cells.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
needleYes
sheet_nameNo
case_sensitiveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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. It mentions the search functionality but doesn't cover important aspects like whether this is a read-only operation, performance characteristics (e.g., speed on large sheets), authentication requirements, error handling, or what happens with multiple matches. The description is too minimal for a tool with 4 parameters.

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 extremely concise at just one sentence with zero wasted words. It's front-loaded with the core functionality and efficiently communicates the basic purpose. Every word earns its place, making it easy to parse quickly.

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?

Given that an output schema exists, the description doesn't need to explain return values. However, for a search tool with 4 parameters and no annotations, the description is too minimal. It covers the basic purpose but lacks crucial context about behavior, parameter usage, and relationship to sibling tools. The existence of an output schema raises the baseline slightly.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate but fails to do so. It mentions searching 'across one sheet or all sheets' which hints at the sheet_name parameter, but doesn't explain the spreadsheet_id_or_url format, what 'needle' represents, or the case_sensitive option. The description adds minimal value beyond what's implied by parameter names.

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 action ('Search text'), target ('across one sheet or all sheets'), and outcome ('return matching cells'). It distinguishes from siblings like read_sheet_values or read_sheet_grid by focusing on text search rather than data retrieval. However, it doesn't explicitly differentiate from potential similar search tools that might exist.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose search_sheet over other tools like read_sheet_values for data extraction or how it relates to siblings like sheet_to_json. There's no context about use cases, prerequisites, or exclusions.

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

sheet_to_jsonB

Convert a Google Sheets tab into JSON records using the header row.

ParametersJSON Schema
NameRequiredDescriptionDefault
spreadsheet_id_or_urlYes
sheet_nameYes
header_rowNo
start_rowNo
end_rowNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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. It states the conversion action but lacks details on permissions required, rate limits, error handling, or output format specifics. This is inadequate for a tool with 5 parameters and no annotation coverage.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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?

Given the tool's complexity (5 parameters, no annotations) and the presence of an output schema, the description is minimally adequate. It covers the core purpose but lacks details on parameter usage, behavioral traits, and differentiation from siblings, leaving gaps that the agent must infer from other sources.

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 0%, so the description must compensate. It mentions 'using the header row', which hints at the 'header_row' parameter, but does not explain other parameters like 'spreadsheet_id_or_url', 'sheet_name', 'start_row', or 'end_row'. The description adds minimal value beyond the schema, resulting in a baseline score.

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 purpose: converting a Google Sheets tab into JSON records using the header row. It specifies the verb 'convert' and resource 'Google Sheets tab', but does not explicitly differentiate from sibling tools like 'read_sheet_values' or 'read_sheet_grid', which might also read sheet data in different formats.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'read_sheet_values' or 'read_sheet_grid', nor does it specify use cases or exclusions, leaving the agent to infer usage from the purpose alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.4.0
    • First observeddiagnose_google_auth
    • First observeddownload_google_doc_images
    • First observedexport_google_file
    • First observedget_sheet_row
    • First observedinspect_sheet_images
    • First observedread_google_doc
    • First observedread_sheet_grid
    • First observedread_sheet_values
    • First observedresolve_google_file
    • First observedsearch_sheet
    • First observedsheet_to_json

TDQS

B3.2/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific Google Workspace components like Docs or Sheets, but some overlap exists between read_sheet_grid and read_sheet_values which both read sheet data with slightly different scopes. The descriptions help clarify the differences, but an agent might occasionally confuse these similar tools.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern throughout, such as diagnose_google_auth and export_google_file, with clear and descriptive naming. There are minor deviations like sheet_to_json which uses 'to' instead of a verb, but overall the naming is highly predictable and readable.

Tool Count5/5

With 11 tools, the count is well-scoped for a Google Workspace server, covering authentication, file operations, and detailed sheet/document interactions. Each tool earns its place by addressing specific needs without being excessive or insufficient for the domain.

Completeness3/5

The tool set covers reading and exporting files well, but there are notable gaps in CRUD operations for the domain, such as creating, updating, or deleting Google Docs or Sheets. While tools like export_google_file and read_google_doc handle retrieval, the lack of write or modify tools limits full lifecycle coverage.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers