A side-by-side look at the KitchenSink4XL and Sheets MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose KitchenSink4XL for workplace & productivity work as a local process; choose Sheets MCP for workplace & productivity as a local process. You can also run both side by side in one mcpServers block.
get_server_info, create_workbook, copy_workbook.google_accounts, find_spreadsheet, create_spreadsheet.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Workplace & Productivity | Workplace & Productivity |
| Quality signal | 57/100 · Good | 65/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 34 |
| Directory activity | 2 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 40 | 29 |
| Full listing | View KitchenSink4XL | View Sheets MCP |
get_server_infoReport the KitchenSink4XL server build: version, the active tool
surface (enabled tool count and approximate token bill), the optional
packs, the host platform and Python, and config, which carries the
install settings a user otherwise cannot confirm arrived: whether path
sandboxing is on with how many roots (a count, never the paths), and
whether saves deep-verify through Excel. A read-only orient call that
needs no workbook and touches no file; use it to confirm the server is
up and see which packs are loaded.create_workbookCreate a new .xlsx workbook at path with the given sheet names (default a
single 'Sheet1'). Sheet names must be unique, at most 31 characters, and
may not start or end with an apostrophe (Excel refuses to open such a
file); the parent directory must already exist. An existing file at path
is left untouched unless overwrite is true, in which case it is FIRST
rotated into its .ks4xl-backups prev slot and then replaced (restore
source='prev' brings it back). Returns the file path and the sheets
created.copy_workbookCopy a workbook file byte-for-byte from src to dst, so nothing in the
original is re-serialized or degraded (charts, shapes, macros, and queries
all carry over intact). An existing dst is left untouched unless overwrite
is true, in which case dst is FIRST rotated into its .ks4xl-backups prev
slot and then replaced (restore source='prev' brings it back). Returns
the destination path. Use this to branch a working copy before a risky
batch of edits.get_workbook_metadataRead a workbook's structure without opening it for edit: every sheet with
its visibility state, TRUE used range (value-bearing bounds, not the often
wrong stored dimension), dimensions, and merged-cell count, plus defined
names, tables, the active sheet, and a round-trip hazard summary (whether
an openpyxl edit would drop fragile parts). The orient-before-editing
call. Read-only; works while the file is open in Excel.diagnose_workbookThe round-trip hazard scan surfaced as a health readout: which fragile
parts the workbook holds (slicers, shapes, embedded objects, Power Query,
VBA, and the rest), whether a file-based openpyxl edit would drop any of
them, the routing recommendation for a surgical versus a structural edit,
and a light integrity summary (sheet counts, formula-cell count, keep_vba).
This is how you check a workbook is safe to edit before mutating it.
What to do with the verdict: hazards never block reads; a would-lose
verdict means every mutating tool will refuse unless you route through
Excel (com pack) or pass allow_loss:true (an explicit, backed-up
acceptance of the loss). A clean verdict means file-based edits are
round-trip safe. Content with no part of its own is covered too: the scan
reads each worksheet's extLst, so x14 conditional formats (data bars, icon
sets), sparkline groups and slicer lists come back as a would-lose verdict
like any other drop-risk hazard. Limit: the extLst walk looks at the
worksheet's top level, and an extension openpyxl drops from anywhere else
is caught at save time by openpyxl's own load warning rather than
here. Read-only.manage_worksheetManage the worksheet lifecycle. action is one of: add (new_name, optional
index), delete (sheet), rename (sheet, new_name), copy (sheet, optional
new_name), reorder (sheet, index as 0-based target), hide (sheet, state
'hidden' or 'very_hidden'), unhide (sheet). The workbook always keeps at
least one VISIBLE sheet, so deleting or hiding the last visible one
refuses.
Consequence worth knowing: delete does NOT rewrite references, so formulas
and defined names that pointed at the deleted sheet break to #REF! when
Excel opens the file (Excel's own behavior); rename likewise does not
rewrite cross-sheet formula text. Audit references first when in doubt. A
hazardous workbook refuses unless allow_loss is true. Auto-backup:
prev/anchor slots in .ks4xl-backups (backup=false skips rotation); atomic
verified save, restored on failed verify. Refuses while open in Excel.read_rangeRead a cell or range addressed by a location object (cell, range, r1c1,
name, table, used_range, region, search, or a grid-view anchor; sheet
picks the sheet when the location does not, default active). values controls the honest calc story:
'cached' returns the last calculated values, 'formula' the formula
strings, 'both' pairs each value with a label (cached, absent, formula,
value). A formula cell with no cached value is labelled 'absent', never
passed off as blank. Read-only; page large ranges with query_range.set_cellWrite a single cell addressed by a location object. A string beginning
with '=' is ALWAYS stored as a formula (there is no literal escape),
normalized so modern functions do not land as #NAME? and flagged to
recalculate on open; anything else is a literal. A hazardous workbook
refuses unless allow_loss is true. Auto-backup: prev/anchor slots in
.ks4xl-backups (backup=false skips rotation); atomic verified save,
restored on failed verify. Refuses while open in Excel.write_rangeWrite a 2D block of values and formulas anchored at the location's
top-left cell. data is a list of row lists and must be RECTANGULAR:
ragged rows refuse (pad short rows with null, which clears those
cells); content outside the block is never touched. Formula strings
('=...') are normalized and flag recalculation. Grid limits and the
200,000-cell write ceiling apply. A hazardous workbook refuses unless
allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified
save. Refuses while open in Excel.clear_rangeClear a cell or range: what='contents' removes values and formulas,
'formats' resets styles to default, 'all' does both. Neither removes
merges, conditional formats, validations, comments, or hyperlinks; those
have their own manage tools. Addressed by a location object. A hazardous
workbook refuses unless allow_loss is true. Auto-backup: prev/anchor slots
in .ks4xl-backups (backup=false skips rotation); atomic verified save,
restored on failed verify. Refuses while open in Excel.copy_rangeCopy a source rectangle to a destination anchor (location objects, may
name different sheets). what is 'all', 'values', 'formulas', or 'formats'.
The destination is overwritten; the source is buffered first, so an
overlapping paste is safe. Relative refs in copied formulas shift by the
paste offset like an Excel copy unless adjust_formulas is false; absolute
($) anchors stay put. A hazardous workbook refuses unless allow_loss is
true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while
open in Excel.move_rangeMove a rectangle to a new anchor on the same sheet, rewriting every
formula, name, conditional format, validation, table ref, and merge that
pointed into the source so references follow the cells (Excel move
semantics). A cross-sheet destination refuses (copy_range then clear_range
instead); cells at the destination are overwritten. A hazardous workbook
refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic
verified save. Refuses while open in Excel.google_accountsManage the Google accounts Sheets MCP can use. list: show signed-in accounts and the default. add: sign in to a Google account (opens a browser sign-in; also use this when a sign-in has expired). remove: sign an account out and revoke access. set_default: choose the account used for new spreadsheets.find_spreadsheetFind a spreadsheet by name among the ones the user has opened or created with Sheets MCP before (the list is kept on their computer). Use it when the user names a sheet instead of pasting a link, e.g. "my budget sheet". It can't search the rest of their Google Drive: if nothing matches, ask for the link. Leave query empty to list the most recent.create_spreadsheetCreate a new Google Sheets spreadsheet.get_spreadsheet_infoGet a spreadsheet's title, tabs (sizes, frozen rows/cols), charts (ids, types, data ranges), named ranges, and the first few rows of each tab. Call this first to understand a sheet's layout.read_rangeRead cell contents from a range, or its formatting with mode "formats". Large ranges are truncated; use next_range to continue.read_rangesRead several ranges in one call, across any tabs. Faster than calling read_range repeatedly. Each range is truncated to its share of max_cells; use its next_range with read_range to continue.write_rangeWrite values and/or formulas starting at the top-left cell of the range. Input is parsed like typing into the UI (formulas, dates, percentages work). Previous contents are saved for undo_last. Returns any formula errors found after writing.fill_rangeFill cells from a source block, like dragging the fill handle or pasting onto a bigger selection: the source's formulas (relative references shift), values and formatting repeat across the destination. Use it after writing one row or column of formulas to extend them across a table, instead of sending every column. With continue_series, patterns continue instead (1, 2, 3 → 4, 5, 6; Jan → Feb; dates). The destination's previous contents are saved for undo_last. Returns any formula errors found after filling.append_rowsAppend rows after the last row of data in a table (detected from the given range or tab).clear_rangeClear values and formulas in a range (formatting is kept). Previous contents are saved for undo_last.find_replaceFind and replace text across a tab or the whole spreadsheet. Not undoable - consider read_range first.undo_lastUndo the most recent write_range, append_rows, or clear_range made through this server (restores values/formulas only, not formatting or structure). History is kept in memory until the server restarts.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"kitchensink4xl": {
"command": "uvx",
"args": [
"kitchensink4xl"
]
}
}
}
{
"mcpServers": {
"sheets-mcp": {
"command": "npx",
"args": [
"-y",
"@sheetsmcp/server"
]
}
}
}