Highlights
Two major community contributions plus a locale fix.
✨ New tools
Formatting analysis (by @marcin-uliasz in #125)
sheets_get_border_map — compact 2D map of horizontal/vertical border lines. Resolves the "right border of N vs left border of N+1" ambiguity that makes per-cell border JSON hard to reason about.
sheets_compare_ranges — position-by-position formatting diff between two equally-sized ranges. Great for verifying repeated patterns ("do rows 6–85 all match the template?").
Structural editing (by @master-nevi in #126)
sheets_delete_columns — delete columns via full-column A1 range (e.g. Sheet1!B:D).
sheets_delete_rows — delete rows via full-row A1 range (e.g. Sheet1!2:4).
🌍 Locale fix
Conditional formatting formulas are now normalized to English locale by default (semicolons → commas), which fixes a real pain point for non-English Sheets users (notably Polish). Original formulas are preserved under _formulaLocaleRaw and normalization can be disabled with normalizeFormulas: false.
New options:
normalizeFormulas on sheets_get_conditional_formatting and sheets_get_full_sheet_snapshot (default: true)
includeConditionalFormatting on sheets_get_full_sheet_snapshot (default: true)
🧪 Test coverage
Big coverage bump: google-auth, validation-helpers, response-helpers, formula-locale, json-parser, error-messages, plus edge cases across existing tools. 485/485 passing.
🧹 Cleanup
- Removed unused
mode parameter from sheets_compare_ranges schema (was documented but never read).
- Simplified axis title assignment in
create-chart.
🙏 Thanks
- @marcin-uliasz — border-map + compare-ranges + locale fix + massive test coverage
- @master-nevi — delete-columns + delete-rows
Full changelog: https://github.com/freema/mcp-gsheets/blob/main/CHANGELOG.md