Connect your AI Agents to Google Sheets in minutes

Merge lets you securely connect your agents to Google Sheets and thousands of tools instantly

Available tools

add_banding

Apply alternating row or column colors (zebra striping) to a range. range accepts A1 notation (e.g. 'Sheet1!A1:E20') or a GridRange object. Provide row_properties, column_properties, or both. Returns the bandedRangeId for use in update_banding/delete_banding.

update_banding

Update an existing banding rule's range or colors. Provide banded_range_id (from add_banding or get_spreadsheet) and the fields to change. range accepts A1 notation or a GridRange object. Only sub-fields you set are updated — unspecified colors are preserved.

delete_banding

Delete a banding rule by ID. Use get_spreadsheet to find banded_range_id values on each sheet. This is irreversible.

update_borders

Set borders around a cell range. Each side (top/bottom/left/right) takes a Border with style and optional colorStyle. inner_horizontal and inner_vertical control internal lines. Omitted sides are not modified.

add_conditional_format_rule

Add a conditional formatting rule to one or more ranges. Provide either booleanRule (condition + format) or gradientRule (minpoint/midpoint/maxpoint), exactly one. index controls insertion order; omit to append.

delete_conditional_format_rule

Delete a conditional format rule at the given 0-based index on a sheet. To inspect existing rules use get_spreadsheet with include_grid_data=True. This is irreversible.

update_conditional_format_rule

Replace a conditional format rule at a given index, or move it to a new position. sheet_id targets the sheet; index is the rule's current 0-based position. Provide rule/gradient_rule to replace, or new_index to reorder.

format_cells

Apply cell-level formatting (number format, colors, fonts, alignment, wrap, borders, padding) to a range using RepeatCellRequest. Use a GridRange to target cells. Pass only the format properties you want to set; omitted fields will not be touched.

add_named_range

Create a named range so the cells can be referenced by name in formulas (e.g. =SUM(SalesData)). Names should be valid identifiers. Use update_named_range to rename or move; delete_named_range to remove.

update_named_range

Update an existing named range's name or cell range. Provide the named_range_id (from add_named_range or get_spreadsheet); pass name and/or range to change. Only changed fields are sent.

delete_named_range

Delete a named range by ID. Use get_spreadsheet to find named_range_id values. Formulas referencing the deleted name will break. This is irreversible.

add_sheet

Add a new sheet (tab) to an existing spreadsheet with customizable properties.

delete_sheet

Permanently delete a sheet (tab) from a spreadsheet. Cannot be undone.

update_sheet_properties

Update sheet properties like title, position, visibility, or tab color.

copy_sheet

Copy a sheet within the same spreadsheet or to a different spreadsheet.

sort_range

Sorts data in rows based on a sort order per column. Supports multi-column sorting and color-based sorting.

set_data_validation

Sets data validation rules to cells in a range. Supports number, text, date validation, dropdown lists, and custom rules. Use empty rule to clear validation.

set_basic_filter

Sets a basic filter on a sheet with optional sorting and column-specific filter criteria. Supports text, number, and date filtering.

add_chart

Add a chart (bar, line, area, column, scatter, combo, stepped area) to a spreadsheet. Requires A1 ranges for domain (x-axis) and series (y-axis) data.

update_chart

Update an existing chart's spec — change chart type, title, or data ranges. Provide chart_id (from add_chart) and the spec fields to change.

add_protected_range

Lock a range from edits. warning_only=True shows a warning but still allows edits; False blocks them. Optionally restrict edits to specific editor users/groups, or allow domain users to edit.

auto_fill

Extend a pattern (formula, date sequence, number series) by auto-fill instead of writing each value. Provide either range (auto-fill within the range, using the first row/column as source) or source_and_destination (explicit source + dimension + fill_length). use_alternate_series=True flips the inferred series direction.

merge_cells

Merge cells across a range. Discards content from all cells except the top-left of each merged block; not reversible via unmerge_cells. merge_type controls the merge mode: MERGE_ALL merges everything in the range, MERGE_COLUMNS merges per column (one merge per column), MERGE_ROWS merges per row.

unmerge_cells

Unmerge previously merged cells in a range. Useful for decomposing merged template cells before editing.

delete_duplicates

Remove duplicate rows from a range, comparing only the columns listed in comparison_columns (DimensionRange list). The first occurrence is kept. Returns the count of removed rows. Irreversible.

delete_dimension

Delete rows or columns from a sheet. range.dimension is ROWS or COLUMNS; range.start_index/end_index are zero-based, end-exclusive. This is irreversible — confirm intent before calling.

insert_dimension

Insert empty rows or columns into a sheet. range.dimension selects ROWS or COLUMNS; range.start_index/end_index are zero-based, end-exclusive. inherit_from_before controls whether the new cells inherit formatting from the row/column before (True) or after (False).

move_dimension

Reorder rows or columns. source.dimension is ROWS or COLUMNS; source.start_index/end_index are zero-based, end-exclusive. destination_index is the position before which the rows/columns are inserted (zero-based, in the dimension's pre-move coordinates).

add_dimension_group

Create a collapsible row or column group for hierarchical reports. range.dimension is ROWS or COLUMNS; range.start_index/end_index are zero-based, end-exclusive. Nested groups create deeper outline levels.

auto_resize_dimensions

Auto-fit row heights or column widths to content. dimensions.dimension is ROWS or COLUMNS; start_index/end_index are zero-based, end-exclusive. The simplest fix for truncated content after writing data.

update_dimension_properties

Set column widths or row heights, or hide/show dimensions. range.dimension is ROWS or COLUMNS; range.start_index/end_index are zero-based, end-exclusive. Provide pixel_size in pixels and/or hidden. Only provided fields are modified.

duplicate_sheet

Duplicate a sheet within the same spreadsheet using DuplicateSheetRequest. Unlike copy_sheet (which uses :copyTo and auto-names the result), this lets you set the new sheet's name and position. Use copy_sheet to copy across spreadsheets.

delete_embedded_object

Delete an embedded chart or image by its id. The object_id is the chart_id returned by add_chart, or read from get_spreadsheet (sheets[].charts[].chartId). Irreversible.

update_embedded_object_position

Reposition an embedded object (chart or image) by id. Use new_sheet_id to move to another sheet, or overlay fields to set anchor cell, pixel offsets, and size on the current sheet.

update_filter_view

Update an existing named filter view. Provide filter_view_id (from add_filter_view or get_spreadsheet) plus the fields to change. fields mask is computed from provided inputs.

add_filter_view

Create a named filter view with persistent filter/sort criteria. Unlike set_basic_filter, multiple filter views coexist without overwriting each other. Returns filter_view_id for later update_filter_view/delete_filter_view.

delete_filter_view

Delete a named filter view by ID. Use get_spreadsheet to find filter_view_id values on each sheet. This is irreversible.

find_replace

Bulk find and replace text. Provide exactly one scope: a range (GridRange), a sheet_id, or all_sheets=True. Optional flags: match_case, match_entire_cell, search_by_regex, include_formulas. Returns the number of occurrences changed.

trim_whitespace

Strip leading and trailing whitespace from string cells in a range. Returns the count of cells changed. Common cleanup after data import.

add_table

Add a table to a sheet over a GridRange (include the header row). Optionally set per-column names and types (TEXT, DOUBLE, CURRENCY, PERCENT, DATE, TIME, DATE_TIME, BOOLEAN, DROPDOWN). Returns the new table_id.

create_spreadsheet

Create a new spreadsheet with specified title and optional properties.

get_spreadsheet

Retrieve spreadsheet information including metadata, sheets, and optionally cell data.

update_spreadsheet_properties

Update spreadsheet properties such as title, locale, or timezone.

validate_credential

Validate Google Sheets credentials. Verifies credentials during setup.

get_values

Read cell values from a specified range using A1 notation (e.g., 'Sheet1!A1:B10').

update_values

Write cell values to a specified range. Supports formulas and raw values.

append_values

Append rows to the end of a table, automatically finding the last row with data.

clear_values

Clear cell values from a range while preserving formatting and structure.

batch_get_values

Read cell values from multiple ranges in a single efficient API call.

batch_update_values

Update multiple ranges with values in a single efficient API call.

batch_clear_values

Clear values from multiple ranges in a single API call while preserving formatting.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Google Sheets  MCP server

FAQs on using Merge's Google Sheets  MCP server

What is a Google Sheets MCP server?

It’s an MCP server that exposes data and functionality from Google Sheets via tools. Your agents can invoke these tools to add sheets, sort data in a row within a sheet, copy a sheet to a new spreadsheet, and more.

How can I use the Google Sheets MCP server?

Here are some common use cases:

  • Automated reporting and dashboards: Your agent can pull data from various sources and automatically populate Google Sheets reports with the latest metrics. For example, when weekly sales data is updated in your CRM, your agent can calculate totals, generate trend analyses, and update your executive dashboard spreadsheet with formatted charts and insights 
  • Data validation and cleanup: Your agent can scan your spreadsheets for inconsistencies, duplicates, or formatting errors and automatically correct them. For instance, when new contact information is added to your lead tracking sheet, your agent can validate email formats, standardize phone number formatting, and flag duplicate entries for review
  • Cross-system data synchronization: Your agent can keep data synchronized between Google Sheets and other tools in your workflow. For example, when a task status changes in your project management sheet, your agent can update the corresponding record in your project management platform and notify relevant team members via Slack 
  • Budget tracking and alerts: Your agent can monitor spending across your budget sheets and trigger alerts when thresholds are reached. For instance, when department expenses approach 80% of their quarterly budget, your agent can notify finance managers, create a summary of top spending categories, and suggest areas for cost optimization based on historical patterns

What are popular tools for Google Sheets’ MCP server?

Here are some popular tools across data types:

Sheets

  • <code class="blog_inline-code">copy_sheet</code>
  • <code class="blog_inline-code">delete_sheet</code>
  • <code class="blog_inline-code">add_sheet</code>

Cell values 

  • <code class="blog_inline-code">get_values</code>
  • <code class="blog_inline-code">batch_get_values</code>
  • <code class="blog_inline-code">append_values</code>
  • <code class="blog_inline-code">clear_values</code>

Spreadsheets

  • <code class="blog_inline-code">create_spreadsheet</code>
  • <code class="blog_inline-code">get_spreadsheet</code>
  • <code class="blog_inline-code">update_spreadsheet_properties</code>

What makes Merge Agent Handler’s Google Sheets MCP server better than alternative Google Sheets MCP servers?

Merge Agent Handler provides platform-level capabilities that apply to all connectors, including Google Sheets:

  • Enterprise-grade security and DLP: Tool inputs and outputs are scanned for sensitive data, with rules to block, redact, or mask content before execution or return
  • Authentication and credential management: Supports guided user authentication flows and manages credentials on behalf of your agents
  • Tool Pack management: Lets you bundle connectors and tools into Tool Packs and control which agents and users can access them
  • Real-time observability and audit trails: Every tool call is logged, with fully-searchable logs to audit, debug, and optimize agent behavior 

Can I set custom security rules for Google Sheets tool calls in Merge Agent Handler?

Yes, Merge Agent Handler allows you to configure custom data loss prevention (DLP) rules for Google Sheets tool calls. 

Here are examples of security rules you can set:

  • Sensitive data redaction: Block or redact tool calls that attempt to read or write sensitive information (e.g., social security numbers). For example, if your agent tries to update a cell with a value matching a credit card pattern, the rule can automatically redact the numbers or block the operation entirely
  • External sharing restrictions: Prevent your agent from sharing spreadsheets with email addresses outside your approved domains. For instance, you can block any share_spreadsheet tool calls that attempt to grant access to recipients not on your organization's allow list
  • Password and credential protection: Automatically detect and block tool calls that attempt to write passwords, authentication tokens, or other credentials into spreadsheet cells. For example, if your agent tries to log API keys or database passwords in a tracking sheet, the security rule can intercept and block the write operation
  • PII masking: Configure rules to mask personally identifiable information when your agent reads from sheets containing customer data. For instance, when your agent retrieves employee information from an HR spreadsheet, phone numbers and addresses can be automatically masked while still allowing the agent to process other fields like department and role

How can I start using Merge Agent Handler’s Google Sheets MCP server?

You can follow these steps:

1. Create your Agent Handler account. Sign up for a free account here.

2. Create a Tool Pack. Navigate to "Tool Packs" in the left sidebar and click "Create New Tool Pack." Give it a descriptive name (e.g., "Google Sheets Automation Pack").

3. Add the Google Sheets connector. Browse the available connectors and add Google Sheets to your Tool Pack.

4. Configure authentication. Choose your authentication method:

  • Individual authentication: Each user connects their own Google Sheets account
  • Shared authentication: Use one set of organization-level credentials for all users

5. Select specific tools. Choose which Google Sheets tools you want to make available to your agent, or enable all tools by default.

6. Register a User. Navigate to "Registered Users" in the sidebar and create a new registered user. This represents the identity that will perform actions through your agent.

7. Save your Tool Pack. Review and save all your Tool Pack settings.

8. Connect to your agent or IDE. Copy the MCP entry URL from your Tool Pack settings. The URL format will be: https://ah-api.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp. Then add it to your IDE configuration (Cursor, Windsurf, Claude Desktop, or Visual Studio Code) using the authentication token provided.

Can employees use Merge Agent Handler to connect their AI tools to Google Sheets?

Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Google Sheets without bypassing IT governance.

Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.

IT also provisions access by role or group via SCIM. A finance analyst gets Google Sheets access to build financial reports, NetSuite to close books, and Expensify to track spend; while a sales rep gets Google Sheets to track custom metrics, Salesforce to manage pipeline, and Gong to review call recordings.

Every tool call an employee's AI makes to Google Sheets is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.

Explore other MCP servers built and managed by Merge

oracle_hcm
Oracle HCM
oracle_sales_cloud
Oracle Sales Cloud
oracle_scm
Oracle SCM
oura
Oura
outlook
Outlook
pagerduty
PagerDuty
paypal
PayPal
peec
Peec AI
pendo
Pendo
pipedrive
Pipedrive
plaud
Plaud
posthog
PostHog
pubmed
PubMed
pylon
Pylon
quartr
Quartr
quickbooks_online
QuickBooks Online
ramp
Ramp
readme
ReadMe
render
Render
rootly
Rootly
sabre
Sabre
salesforce
Salesforce
sanity
Sanity
sapsf
SAP SuccessFactors

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now