[Bug] Google Sheets MCP `update_values` fails with serialization error (nested arrays converted to strings)

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Description:
When calling the user-google-sheets MCP tool update_values, the 2D array parameter values gets incorrectly serialized into a string before reaching the Google Sheets API, causing a 400 Bad Request error.

Tool:
user-google-sheetsupdate_values / update_spreadsheet

Actual Behavior:
The inner arrays are stringified into escaped JSON strings (e.g. ["[\"a\", \"b\"]", "[\"c\", \"d\"]"]), which violates Google API’s Protobuf schema.

Error Message:
Invalid value at ‘values[0]’ (type.googleapis.com/google.protobuf.ListValue), “["test1", "test2"]”

Environment:

  • OS: Windows 11
  • Cursor Version: Latest

Steps to Reproduce

  1. Configure and authenticate the Google Sheets MCP server (user-google-sheets) in Cursor Settings.
  2. In Composer / Chat (Agent mode), ask the agent to write data to a Google Spreadsheet using the update_values tool with a 2D array parameter (e.g., values: [["test1", "test2"]]).
  3. Observe that the tool execution fails with a 400 Bad Request error.

Root cause:
The inner arrays in the 2D array parameter are incorrectly stringified into escaped JSON strings (e.g. ["[\"test1\", \"test2\"]"]) instead of raw arrays before reaching the Google Sheets API, triggering the error:
Invalid value at 'values[0]' (type.googleapis.com/google.protobuf.ListValue), "[\"test1\", \"test2\"]"

Expected Behavior

valuesshould be passed as a nested array (e.g.[[“a”, “b”], [“c”, “d”]]->ListValue`).

The nested 2D array parameter values should be correctly serialized as an array of arrays (Protobuf ListValue) when passed to the Google Sheets MCP server and API, successfully writing cell values to the spreadsheet.

Operating System

Windows 10/11

Version Information

Version: 3.17.21

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey @usuiatsushi ,thanks for the clear repro!

This isn’t anything on your end - it’s an issue we’re tracking. Two things that usually get the write through in the meantime:

  • Ask the agent to retry - it often works on the second attempt.
  • Add an instruction like “pass values as a JSON array of arrays, one inner array per row, never as strings” to your prompt or a rule.

If it happens again, drop the Request ID from that run here (three-dot menu → Copy Request ID) and I’ll dig into your specific case. I’ll post back when there’s an update!