mcp-google-sheets (socar-edwin/mcp-google-sheets-extended) is an MCP server listed on the M8ven Trust Index. It scores 56 out of 100, grade D. It declares 40 tools. No publisher has claimed this listing.

D
Caution
56/100

mcp-google-sheets

A Python-based MCP server that acts as a bridge between MCP-compatible clients and the Google Sheets API, enabling AI-driven automation and data manipulation workflows.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

socar-edwin

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
⚠️
Tool annotations don’t match behaviour
1 read-only tool performs write/delete/exec — export_sheet (line 1815: with open(output_path, "wb") as f:)
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes40 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

get_sheet_data

Get data from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all data. include_grid_data: If True, includes cell formatting and

get_sheet_formulas

Get formulas from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all formulas from the sheet. Returns: A 2D array of the sheet

update_cells

Update cells in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Cell range in A1 notation (e.g., 'A1:C10') data: 2D array of values to update Returns: Result of the update operation

batch_update_cells

Batch update multiple ranges in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet ranges: Dictionary mapping range strings to 2D arrays of values e.g., {'A1:B2': [[1, 2], [3, 4]], 'D1:E2': [['a', 'b'], ['c', 'd']]} Returns: Result o

add_rows

Add rows to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of rows to add start_row: 0-based row index to start adding. If not provided, adds at the beginning. Returns: Result of the operation

add_columns

Add columns to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of columns to add start_column: 0-based column index to start adding. If not provided, adds at the beginning. Returns: Result of the operation

list_sheets

List all sheets in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) Returns: List of sheet names

copy_sheet

Copy a sheet from one spreadsheet to another. Args: src_spreadsheet: Source spreadsheet ID src_sheet: Source sheet name dst_spreadsheet: Destination spreadsheet ID dst_sheet: Destination sheet name Returns: Result of the operation

rename_sheet

Rename a sheet in a Google Spreadsheet. Args: spreadsheet: Spreadsheet ID sheet: Current sheet name new_name: New sheet name Returns: Result of the operation

get_multiple_sheet_data

Get data from multiple specific ranges in Google Spreadsheets. Args: queries: A list of dictionaries, each specifying a query. Each dictionary should have 'spreadsheet_id', 'sheet', and 'range' keys. Example: [{'spreadsheet_id': 'abc', 'sheet': 'Sheet1', 'range': 'A1:B5'}, {'spreadsheet_id': 'xyz',

get_multiple_spreadsheet_summary

Get a summary of multiple Google Spreadsheets, including sheet names, headers, and the first few rows of data for each sheet. Args: spreadsheet_ids: A list of spreadsheet IDs to summarize. rows_to_fetch: The number of rows (including header) to fetch for the summary (default: 5). Returns: A list of

create_spreadsheet

Create a new Google Spreadsheet. Args: title: The title of the new spreadsheet folder_id: Optional Google Drive folder ID where the spreadsheet should be created. If not provided, uses the configured default folder or creates in root. Returns: Information about the newly created spreadsheet includin

create_sheet

Create a new sheet tab in an existing Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet title: The title for the new sheet Returns: Information about the newly created sheet

list_spreadsheets

List all spreadsheets in the specified Google Drive folder. If no folder is specified, uses the configured default folder or lists from 'My Drive'. Args: folder_id: Optional Google Drive folder ID to search in. If not provided, uses the configured default folder or searches 'My Drive'. Returns: List

share_spreadsheet

Share a Google Spreadsheet with multiple users via email, assigning specific roles. Args: spreadsheet_id: The ID of the spreadsheet to share. recipients: A list of dictionaries, each containing 'email_address' and 'role'. The role should be one of: 'reader', 'commenter', 'writer'. Example: [ {'email

list_folders

List all folders in the specified Google Drive folder. If no parent folder is specified, lists folders from 'My Drive' root. Args: parent_folder_id: Optional Google Drive folder ID to search within. If not provided, searches the root of 'My Drive'. Returns: List of folders with their ID, name, and p

search_spreadsheets

Search for spreadsheets in Google Drive by name or content.

find_in_spreadsheet

Find cells containing a specific value in a Google Spreadsheet.

batch_update

Execute a batch update on a Google Spreadsheet using the full batchUpdate endpoint. This provides access to all batchUpdate operations including adding sheets, updating properties, inserting/deleting dimensions, formatting, and more. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL)

add_chart

Add a chart to a Google Spreadsheet. Creates a chart from the specified data range with customizable type, title, and positioning. The chart is added as a floating element on the sheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet containing the dat

upload_excel

Upload an Excel (.xlsx/.xls) or CSV file and convert it to a Google Spreadsheet.

export_sheet

Export (download) a Google Spreadsheet as Excel, CSV, or PDF.

format_cells

Apply formatting to a range of cells.

merge_cells

Merge (or unmerge) cells in a range.

auto_resize

Auto-resize columns or rows to fit content.

sort_range

Sort a range of cells by a column.

add_filter

Add a basic filter (auto-filter) to a range.

add_pivot_table

Create a pivot table from source data.

add_conditional_format

Add a conditional formatting rule to a range.

duplicate_sheet

Duplicate a sheet/tab within the same spreadsheet.

move_sheet

Move a sheet/tab to a different position (reorder tabs).

protect_range

Protect a range or entire sheet from editing.

add_comment

Add a comment to a spreadsheet. Optionally anchor it to a specific cell.

get_revision_history

Get the revision (edit) history of a spreadsheet.

delete_rows_columns

Delete rows or columns from a sheet.

clear_range

Clear data from a range of cells. Optionally clear formatting too.

get_comments

Get all comments on a spreadsheet.

resolve_comment

Resolve a comment, optionally adding a reply before resolving.

set_tab_color

Change the color of a sheet tab.

append_rows

Append rows of data after the last row with content in a sheet. Useful for adding log entries or new records without knowing the exact row number.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configCREDENTIALS_CONFIG➡️ See [Detailed Authentication & Environment Variables](#-authentication--environment-variables-detailed) for other options (OAuth, ).
configTOKEN_PATHPath to store the user's refresh token after first login (default: token.json). Must be writable.
configCREDENTIALS_PATHPath to the downloaded OAuth credentials JSON file (default: credentials.json).
configSERVICE_ACCOUNT_PATHexport ="/path/to/your/service-account-key.json"
configDRIVE_FOLDER_IDexport ="YOUR_DRIVE_FOLDER_ID"
configENABLED_TOOLSTool Filtering: Reduce context window usage by enabling only the tools you need with --include-tools or environment variable.
configHOSTe =0.0.0.0 ^
configFASTMCP_HOST
configFASTMCP_PORT
Deployment configuration, supplied by whoever hosts the server. Users are not asked for these.
deployPORT
// quality suggestions

All four hints declared on every tool

40/40 tools missing one or more hints — get_sheet_data (missing: destructiveHint, idempotentHint, openWorldHint); get_sheet_formulas (missing: destructiveHint, idempotentHint, openWorldHint); update_cells (missing: readOnlyHint, idempotentHint, openWorldHint), +37 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool annotations match behaviour

1 read-only tool performs write/delete/exec — export_sheet (line 1815: with open(output_path, "wb") as f:)

Either remove the readOnlyHint:true annotation, or remove the write/delete call from the tool handler.

Tool handlers catch errors

26/40 tool handlers wrap calls in try/catch (65%)

Wrap each tool handler body in try/catch and return a structured error response.

Tests exist

No test files found

Add tests that exercise each declared tool.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 4 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/socar-edwin/mcp-google-sheets-extended?variant=verified)](https://m8ven.ai/mcp/socar-edwin/mcp-google-sheets-extended)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 8cb9055ba278afd97992da26f96384c848afff4c
code hash: 88bbc0bbae6933a51200209de720119d6eaa982946c76f71c407a4a9c94ab7ce
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client