Google Sheets and Drive MCP
Provides tools for searching and listing Google Drive files, and granting editing access to authorized files.
Provides tools for reading, writing, and analyzing Google Sheets, including creating sheets, managing data, creating pivot tables and charts, conditional formatting, and more.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Sheets and Drive MCP read the range A1:C10 from my budget spreadsheet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Sheets and Drive MCP
Локальный пакет с двумя MCP-серверами по stdio:
google-sheets-mcpпредоставляет 25 инструментов для предсказуемого чтения, изменения и анализа Google-таблиц;google-drive-mcpпредоставляет поиск и перечисление таблиц, а также отдельный чувствительный инструмент для выдачи editor-доступа к разрешённым файлам.
Инструменты MCP
health— диагностика конфигурации и лимитов;get_spreadsheet— метаданные таблицы и список листов;create_sheet— создание пустого листа с ограниченным начальным размером;rename_sheet— переименование существующего листа;copy_sheet— полное дублирование листа внутри той же таблицы;read_range— чтение ограниченного A1-диапазона;batch_read_ranges— чтение нескольких ограниченных диапазонов одним API-запросом;read_sheet— безопасное постраничное чтение листа сnext_start_row;write_range— запись прямоугольной матрицы значений;batch_write_ranges— запись нескольких прямоугольных диапазонов одним API-запросом;clear_range— очистка значений в одном ограниченном диапазоне;append_rows— добавление строк в конец табличного диапазона;unpivot_range— преобразование широкой таблицы в длинную с записью результата;create_pivot_table— создание нативной сводной таблицы Google Sheets;create_chart— создание нативной диаграммы Google Sheets;set_basic_filterиclear_basic_filter— установка и снятие фильтра;sort_range— сортировка по одному или нескольким заголовкам;add_conditional_format— цветовое условное форматирование;freeze_panes— закрепление верхних строк и левых колонок;write_formulas— запись прямоугольной матрицы формул;insert_image— вставка изображения внутрь ячейки по HTTP(S)-URL;copy_range— копирование значений, формул, форматов и правил;grant_read_access— выдача пользователю праваreaderна всю таблицу;set_sheet_visibility— скрытие и возврат листа.
create_chart поддерживает все нативные семейства диаграмм Google Sheets:
COLUMN, BAR, LINE, AREA, SCATTER, COMBO, STEPPED_AREA, PIE,
HISTOGRAM, BUBBLE, WATERFALL, SCORECARD, CANDLESTICK, TREEMAP и ORG.
create_pivot_table поддерживает группировки по строкам и столбцам, итоги и
стандартные функции агрегации: SUM, COUNT, AVERAGE, MIN, MAX и другие.
Для условного форматирования используются цвета #RRGGBB. Например, два
вызова с условиями NUMBER_GREATER и NUMBER_LESS позволяют выделить
положительные значения зелёным, а отрицательные — красным.
batch_read_ranges принимает список bounded A1-диапазонов и применяет лимит
чтения к их суммарному потенциальному размеру. batch_write_ranges принимает
список объектов {"range": ..., "values": ...} и применяет лимит записи к
суммарному числу ячеек во всех прямоугольных матрицах. Порядок диапазонов
сохраняется; batch-write является идемпотентной перезаписью указанных диапазонов.
clear_range требует явно указать лист и bounded A1-диапазон, например
'Data'!A1:D20. Операция учитывает общий write-лимит и очищает только значения:
форматирование, data validation, комментарии и размеры листа не изменяются.
create_sheet создаёт пустой лист с настраиваемым числом строк и колонок;
начальная сетка ограничена одним миллионом ячеек и 18 278 колонками.
rename_sheet сохраняет данные, позицию и свойства листа. copy_sheet
дублирует весь лист только внутри той же Google-таблицы, включая данные и
оформление; копирование между разными spreadsheet_id не выполняется.
set_basic_filter создаёт один нативный Basic Filter и заменяет предыдущий
Basic Filter листа. clear_basic_filter снимает его. freeze_panes принимает
число закреплённых строк и колонок; нулевые значения снимают закрепление.
write_formulas принимает только строки, начинающиеся с =. insert_image
использует нативную формулу IMAGE() и требует URL, доступный Google; локальные
файлы сначала нужно разместить в доступном хранилище. Поддерживаются режимы
вписывания, растягивания, исходного и пользовательского размера.
copy_range работает внутри одной Google-таблицы и поддерживает PASTE_VALUES,
PASTE_FORMULA, PASTE_FORMAT, PASTE_NORMAL, перенос data validation,
условного форматирования и транспонирование. Для копирования между разными
таблицами можно использовать связку read_range → write_range.
grant_read_access работает через Google Drive API и выдаёт доступ ко всему
файлу таблицы — Google не поддерживает отдельные права чтения для одного листа.
Для работы с существующими файлами, которые были расшарены на service account,
Drive-клиенту требуется полный scope https://www.googleapis.com/auth/drive:
узкий drive.file такие файлы не видит. Сервисный аккаунт также должен иметь
право делиться файлом, а доменная политика Google Workspace может запрещать
внешний доступ.
set_sheet_visibility не является механизмом защиты: скрытый лист остаётся
частью таблицы и доступен через API. Инструмент не позволяет скрыть последний
видимый лист и поддерживает обратную операцию через hidden=false.
Related MCP server: Google Sheets MCP Server
Google Drive MCP
Отдельный google-drive-mcp предоставляет четыре инструмента:
health— диагностика credentials и собственных границ безопасности;list_spreadsheets(page_size=50, page_token=null)— перечисление доступных Google-таблиц с пагинацией;search_spreadsheets(name_query, page_size=50, page_token=null)— безопасный поиск по буквальной подстроке имени без произвольного Drive query;grant_edit_access(file_id, email, send_notification_email=false)— выдача пользователю фиксированной ролиwriterна весь файл.
Read-инструменты возвращают только file_id, имя и время последнего изменения.
Размер страницы ограничен диапазоном 1–100. Если allowlist пуст, используются
нативные page tokens Google Drive. При включённом allowlist сервер запрашивает
только явно разрешённые ID через files.get, фильтрует неподходящие и недоступные
файлы и использует собственный непрозрачный page token.
Если permission отсутствует, сервер создаёт его. Существующий reader или
commenter повышается до writer; writer, fileOrganizer, organizer и
owner возвращают успешный no-op и никогда не понижаются. Произвольные роли,
передача владения, доменные permissions, revoke и downgrade не поддерживаются.
Google Drive не позволяет выдать editor-доступ только к одному листу или диапазону:
операция меняет доступ ко всему файлу.
Требования
Python 3.12–3.14
uvGoogle Cloud service account с включёнными Google Sheets API и Google Drive API
Установка
UV_CACHE_DIR=.uv-cache uv syncСкопируйте .env.example в локальный .env либо экспортируйте переменные в
окружение MCP-клиента. JSON-ключ и .env нельзя добавлять в репозиторий.
Подготовка Google Cloud
Включите Google Sheets API в нужном Google Cloud project.
Создайте service account и скачайте JSON-ключ в каталог вне репозитория.
Расшарьте тестовую таблицу на email service account с нужными правами.
Установите
GOOGLE_APPLICATION_CREDENTIALSв абсолютный путь к ключу.
Запуск
UV_CACHE_DIR=.uv-cache uv run google-sheets-mcp
UV_CACHE_DIR=.uv-cache uv run google-drive-mcpОба сервера используют stdio: обычный вывод зарезервирован под MCP-протокол.
Диагностический инструмент health проверяет конфигурацию без обращения к Google API.
Подключение к Codex
Codex CLI, IDE extension и desktop app используют общую MCP-конфигурацию. Зарегистрировать локальный сервер можно командой:
codex mcp add google_sheets \
--env GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
--env GOOGLE_SHEETS_MAX_READ_CELLS=100000 \
--env GOOGLE_SHEETS_MAX_WRITE_CELLS=10000 \
--env GOOGLE_SHEETS_REQUEST_TIMEOUT_SECONDS=30 \
--env GOOGLE_SHEETS_MAX_RETRIES=2 \
--env GOOGLE_SHEETS_RETRY_BASE_DELAY_SECONDS=0.5 \
--env GOOGLE_SHEETS_READ_ONLY=true \
--env GOOGLE_SHEETS_ALLOWED_SPREADSHEET_IDS=spreadsheet-id \
-- /absolute/path/to/google_sheets_tool/.venv/bin/google-sheets-mcp
codex mcp add google_drive \
--env GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
--env GOOGLE_DRIVE_REQUEST_TIMEOUT_SECONDS=30 \
--env GOOGLE_DRIVE_READ_ONLY=false \
--env GOOGLE_DRIVE_ALLOWED_FILE_IDS=file-id \
-- /absolute/path/to/google_sheets_tool/.venv/bin/google-drive-mcpПроверить регистрацию:
codex mcp get google_sheets
codex mcp get google_drive
codex mcp listПосле изменения MCP-конфигурации перезапустите Codex или IDE extension. В TUI
список подключённых серверов доступен через /mcp. JSON-ключ не следует
копировать в репозиторий или записывать непосредственно в config.toml;
конфигурация хранит только абсолютный путь к нему.
Эквивалентная ручная конфигурация в ~/.codex/config.toml:
[mcp_servers.google_sheets]
command = "/absolute/path/to/google_sheets_tool/.venv/bin/google-sheets-mcp"
startup_timeout_sec = 10
tool_timeout_sec = 60
enabled = true
[mcp_servers.google_sheets.env]
GOOGLE_APPLICATION_CREDENTIALS = "/absolute/path/to/service-account.json"
GOOGLE_SHEETS_MAX_READ_CELLS = "100000"
GOOGLE_SHEETS_MAX_WRITE_CELLS = "10000"
GOOGLE_SHEETS_REQUEST_TIMEOUT_SECONDS = "30"
GOOGLE_SHEETS_MAX_RETRIES = "2"
GOOGLE_SHEETS_RETRY_BASE_DELAY_SECONDS = "0.5"
GOOGLE_SHEETS_READ_ONLY = "true"
GOOGLE_SHEETS_ALLOWED_SPREADSHEET_IDS = "spreadsheet-id"
[mcp_servers.google_drive]
command = "/absolute/path/to/google_sheets_tool/.venv/bin/google-drive-mcp"
startup_timeout_sec = 10
tool_timeout_sec = 60
enabled = true
[mcp_servers.google_drive.env]
GOOGLE_APPLICATION_CREDENTIALS = "/absolute/path/to/service-account.json"
GOOGLE_DRIVE_REQUEST_TIMEOUT_SECONDS = "30"
GOOGLE_DRIVE_READ_ONLY = "false"
GOOGLE_DRIVE_ALLOWED_FILE_IDS = "file-id"Границы безопасности
GOOGLE_SHEETS_READ_ONLY=true запускает сервер с Google scope
spreadsheets.readonly, убирает изменяющие инструменты из MCP discovery и
дополнительно отклоняет прямые попытки их вызова. Доступными остаются health,
get_spreadsheet, read_range, batch_read_ranges и read_sheet.
GOOGLE_SHEETS_ALLOWED_SPREADSHEET_IDS принимает разделённый запятыми список
точных spreadsheet_id. Если список непустой, любой инструмент отклоняет работу
с другими таблицами до создания Google API-клиента. Пустое значение сохраняет
режим без ограничений. Параметры можно совмещать:
GOOGLE_SHEETS_READ_ONLY=true
GOOGLE_SHEETS_ALLOWED_SPREADSHEET_IDS=spreadsheet-id-1,spreadsheet-id-2Инструмент health сообщает только состояние режимов и количество разрешённых
таблиц, но не раскрывает сами идентификаторы.
GOOGLE_DRIVE_READ_ONLY=true убирает grant_edit_access из discovery и блокирует
его прямой вызов; Drive-клиент получает scope drive.metadata.readonly вместо
полного drive. GOOGLE_DRIVE_ALLOWED_FILE_IDS принимает разделённый запятыми
список точных file_id. При непустом списке list/search обращаются только к этим
ID, а editor-доступ к любому другому файлу отклоняется до создания API-клиента.
Пустой список разрешает любой видимый service account файл. Drive health
сообщает только факт включения allowlist и число файлов, не раскрывая ID.
Повторы временных ошибок
Для HTTP 429, 500, 502, 503 и 504 сервер выполняет ограниченный
exponential backoff. По умолчанию разрешены два повтора с задержками 0,5 и
1 секунду. GOOGLE_SHEETS_MAX_RETRIES=0 полностью отключает повторы; допустимый
диапазон — от 0 до 5. Начальная задержка задаётся через
GOOGLE_SHEETS_RETRY_BASE_DELAY_SECONDS: больше 0 и не более 60 секунд.
Автоматически повторяются только чтения и операции с однозначным конечным
состоянием: write_range (включая формулы и изображения),
batch_write_ranges, clear_range, rename_sheet, установка и снятие Basic
Filter, freeze panes и visibility.
Сервер никогда автоматически не
повторяет append_rows, grant_read_access, create_sheet, copy_sheet,
создание диаграмм, pivot-таблиц и условных правил, сортировку или копирование
диапазона.
google-drive-mcp также не повторяет create/update permission. После timeout
вызывающая сторона должна сначала проверить фактическую роль и только затем
решать, нужен ли отдельный ручной повтор.
Ограничения
сервер рассчитан на локальный однопользовательский запуск по
stdio;авторизация выполняется только через Google Cloud service account;
allowlist ограничивает таблицы целиком, но не отдельные листы или диапазоны;
grant_read_accessиспользует полный Google Drive scope и меняет доступ ко всему файлу, а не к одному листу;grant_edit_accessнаходится только вgoogle-drive-mcp, всегда запрашивает рольwriterдля всего файла и требует capabilitycanShare;insert_imageтребует HTTP(S)-URL, доступный серверам Google;сервер не создаёт и не удаляет Google-таблицы целиком;
multi-step операции не являются транзакциями Google Sheets;
после timeout неоднозначной операции вызывающая сторона должна проверить фактическое состояние перед ручным повтором.
Разработка
UV_CACHE_DIR=.uv-cache uv run ruff check .
UV_CACHE_DIR=.uv-cache uv run pytest
UV_CACHE_DIR=.uv-cache uv build
UV_CACHE_DIR=.uv-cache .venv/bin/python scripts/check_release_artifacts.py
UV_CACHE_DIR=.uv-cache .venv/bin/python scripts/smoke_package.pyGitHub Actions выполняет те же проверки на Python 3.12 для каждого push и pull
request: устанавливает зависимости строго из uv.lock, запускает Ruff и Pytest,
затем собирает sdist и wheel и устанавливает wheel в чистое временное окружение.
Явный smoke-тест чтения не выводит значения ячеек:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_read.pySmoke-тест записи создаёт или переиспользует изолированный лист _mcp_test,
очищает только A:Z на этом листе и проверяет запись чтением обратно:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_write.pyАналитический smoke-тест пересоздаёт только _mcp_test, затем проверяет
постраничное чтение, unpivot, нативную сводную таблицу и диаграмму:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_analytics.pySmoke-тест представления проверяет все типы диаграмм, фильтр, сортировку, условное форматирование и закрепление панелей:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_presentation.pySmoke-тест содержимого проверяет формулы, копирование значений и формул, а также вставку изображения в ячейку:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_content.pySmoke-тест доступа проверяет Drive capability canShare, временно скрывает
_mcp_test, подтверждает состояние и возвращает лист видимым:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_access.pyОтдельный smoke-тест безопасно выдаёт право чтения: сначала проверяет наличие permission, не создаёт дубликат и подтверждает результат чтением обратно. Уведомление пользователю не отправляется:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
GOOGLE_SHEETS_TEST_READER_EMAIL=user@example.com \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_grant_access.pyПолный последовательный прогон всех smoke-тестов:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
GOOGLE_SHEETS_TEST_READER_EMAIL=user@example.com \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_all.pyПрогон изменяет только тестовый лист _mcp_test. Аналитические, presentation и
content-сценарии пересоздают этот лист, поэтому хранить на нём рабочие данные
нельзя.
Проверка всех инструментов через настоящий MCP stdio-протокол:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
GOOGLE_SHEETS_TEST_READER_EMAIL=user@example.com \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_mcp_stdio.pyОтдельный Drive MCP smoke проверяет discovery четырёх инструментов, list/search
строго внутри allowlist, выдачу writer-доступа без уведомления и восстановление
исходного permission в finally:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_DRIVE_TEST_FILE_ID=file-id \
GOOGLE_DRIVE_TEST_EDITOR_EMAIL=user@example.com \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_drive_mcp_stdio.pyПолный release-smoke объединяет Sheets API, оба MCP stdio сценария и временные
проверки permissions. Подробный вывод дочерних сценариев подавляется, а исходный
permission тестового пользователя восстанавливается в finally:
GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json \
GOOGLE_SHEETS_TEST_SPREADSHEET_ID=spreadsheet-id \
GOOGLE_SHEETS_TEST_READER_EMAIL=user@example.com \
UV_CACHE_DIR=.uv-cache uv run python scripts/smoke_release.pyЛицензия и релиз
Проект распространяется по лицензии MIT. История изменений находится в CHANGELOG.md, а обязательные проверки перед публикацией — в RELEASE_CHECKLIST.md.
Полный план и границы MVP описаны в PLAN.md.
Available Tools
25 toolsadd_conditional_formatC
Add a native conditional-formatting rule using #RRGGBB colors.
Inputs: range (required), condition_type (required), spreadsheet_id (required), bold, +4 more. Returns: object
append_rowsC
Append rows to the table detected in an A1 range.
Inputs: range (required), values (required), spreadsheet_id (required), insert_data_option, +1 more. Returns: object
batch_read_rangesC
Read several explicitly bounded A1 ranges in one API request.
Inputs: ranges (required), spreadsheet_id (required), major_dimension, value_render_option. Returns: object
batch_write_rangesB
Write several rectangular ranges in one idempotent API request.
Inputs: data (required), spreadsheet_id (required), value_input_option. Returns: object
clear_basic_filterC
Remove the native basic filter from a sheet.
Inputs: sheet_name (required), spreadsheet_id (required). Returns: object
clear_rangeB
Clear values from one bounded, sheet-qualified A1 range.
Inputs: range (required), spreadsheet_id (required). Returns: object
copy_rangeC
Copy values, formulas, formatting, or rules within one spreadsheet.
Inputs: source_range (required), spreadsheet_id (required), target_start_cell (required), paste_type, +1 more. Returns: object
copy_sheetC
Duplicate one complete sheet within the same spreadsheet.
Inputs: new_sheet_name (required), spreadsheet_id (required), source_sheet_name (required). Returns: object
create_chartC
Create a native chart using the first source column as its domain.
Inputs: anchor_cell (required), source_range (required), spreadsheet_id (required), title, +4 more. Returns: object
create_pivot_tableC
Create a native Google Sheets pivot table from a bounded source range.
Inputs: row_columns (required), target_cell (required), source_range (required), value_columns (required), +4 more. Returns: object
create_sheetC
Create one empty sheet with a bounded initial grid size.
Inputs: sheet_name (required), spreadsheet_id (required), row_count, column_count. Returns: object
freeze_panesA
Freeze top rows and left columns; use zero counts to unfreeze.
Inputs: sheet_name (required), spreadsheet_id (required), frozen_rows, frozen_columns. Returns: object
get_spreadsheetA
Get spreadsheet metadata and its list of sheets.
Inputs: spreadsheet_id (required), include_grid_properties. Returns: object
grant_read_accessC
Grant a user reader access to the entire spreadsheet through Google Drive.
Inputs: email (required), spreadsheet_id (required), send_notification_email. Returns: object
healthA
Report server status and whether Google credentials are configured.
Inputs: no named parameters. Returns: object
insert_imageC
Insert an in-cell image from an HTTP(S) URL using IMAGE().
Inputs: cell (required), image_url (required), spreadsheet_id (required), mode, +2 more. Returns: object
read_rangeC
Read an explicitly bounded A1 range from a spreadsheet.
Inputs: range (required), spreadsheet_id (required), major_dimension, value_render_option. Returns: object
read_sheetC
Read a safe page of a whole sheet; use next_start_row to continue.
Inputs: sheet_name (required), spreadsheet_id (required), max_rows, start_row, +3 more. Returns: object
rename_sheetA
Rename one sheet without changing its data or position.
Inputs: sheet_name (required), new_sheet_name (required), spreadsheet_id (required). Returns: object
set_basic_filterC
Set a native sheet filter on one named column; replaces the existing basic filter.
Inputs: range (required), column_name (required), condition_type (required), spreadsheet_id (required), +2 more. Returns: object
set_sheet_visibilityC
Hide or show a sheet; hiding is not an access-control boundary.
Inputs: sheet_name (required), spreadsheet_id (required), hidden. Returns: object
sort_rangeC
Sort a bounded range by named columns while preserving header rows.
Inputs: range (required), sort_columns (required), spreadsheet_id (required), sort_order, +1 more. Returns: object
unpivot_rangeC
Convert a wide range into normalized rows and write the result.
Inputs: id_columns (required), source_range (required), target_range (required), spreadsheet_id (required), +3 more. Returns: object
write_formulasC
Write a rectangular matrix of formulas beginning with '='.
Inputs: range (required), formulas (required), spreadsheet_id (required). Returns: object
write_rangeB
Write a rectangular values matrix to an A1 range.
Inputs: range (required), values (required), spreadsheet_id (required), value_input_option. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Each tool has a distinct and clearly defined purpose. Even similar tools like read_range, batch_read_ranges, and read_sheet are differentiated by scope (bounded range, multiple ranges, entire sheet page). No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_spreadsheet, clear_range, create_sheet). The only exception is 'health', but it is a simple status check and fits the pattern if considered as a verb implied. Overall, naming is highly predictable.
25 tools is slightly above the typical 3-15 range, but each tool provides a specific, non-redundant operation. The count is justified by the breadth of Google Sheets functionality covered, though it could be trimmed (e.g., batch operations could be merged).
The tool set covers many common operations but has notable gaps: no delete_sheet, no create_spreadsheet, no delete_rows, and no cross-spreadsheet copy/move. This will cause agents to struggle with basic workflows like creating and deleting spreadsheets or deleting data.
Maintenance
Related MCP Connectors
Read and write Google Sheets with your own service account: list tabs, read, append, update, export.
Google Sheets via Apify: write Apify datasets or JSON rows to a sheet, or read a sheet as JSON.
Query your Google Sheets as structured JSON: list sheets and tabs, read schemas, filter rows.
Provides tools for searching Google Workspace documentation and much more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceIntegrates with Google Drive to enable listing, searching, and reading files, plus reading and writing to Google Sheets.710 npm282MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables comprehensive interaction with Google Sheets and Google Drive through OAuth2 authentication. Supports spreadsheet creation, data manipulation, formatting, chart creation, and advanced operations like SQL queries and batch updates.-
- FlicenseNot gradedqualityDmaintenanceEnables reading and writing Google Sheets using API key or service account, with support for public and authenticated access.-
- AlicenseNot gradedqualityCmaintenanceEnables listing, reading, and searching files in Google Drive, as well as reading from and writing to Google Sheets.710 npmMIT