Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

KitchenSink4XL

PYPI · KITCHENSINK4XL · SCANNED SEP 20

Excel (.xlsx) MCP server: calculated/cached/missing labels on every value, formulas, verified writes

Available components

63 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 2 of 19 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability63
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8965 tokens (~224/item across 40 items; 40 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage70
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 9% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the KitchenSink4XL MCP server?

KitchenSink4XL runs locally as a PyPI package, launched with uvx kitchensink4xl. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · kitchensink4xl

# add to Claude Code
claude mcp add kitchensink4ai-kitchensink4xl -- uvx kitchensink4xl
// .cursor/mcp.json
{
  "mcpServers": {
    "kitchensink4ai-kitchensink4xl": {
      "command": "uvx",
      "args": [
        "kitchensink4xl"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "kitchensink4ai-kitchensink4xl": {
      "command": "uvx",
      "args": [
        "kitchensink4xl"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add kitchensink4ai-kitchensink4xl -- uvx kitchensink4xl
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kitchensink4ai-kitchensink4xl": {
      "type": "local",
      "command": [
        "uvx",
        "kitchensink4xl"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add kitchensink4ai-kitchensink4xl --command uvx --arg kitchensink4xl
# ~/.hermes/config.yaml
mcp_servers:
  kitchensink4ai-kitchensink4xl:
    command: "uvx"
    args: ["kitchensink4xl"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "kitchensink4ai-kitchensink4xl": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "kitchensink4xl"
      ]
    }
  }
}
# add to Vellum
assistant mcp add kitchensink4ai-kitchensink4xl -t stdio -c uvx -a kitchensink4xl
// mcp.json
{
  "mcpServers": {
    "kitchensink4ai-kitchensink4xl": {
      "command": "uvx",
      "args": [
        "kitchensink4xl"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/kitchensink4xl@1.2.4

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 19 packages
Packages resolved 19
Stale 2
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 40 exposed · ~8,687 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
apply_edits ~270

Apply many addressed edits as ONE atomic batch. edits is a list of {op, location, ...}: set_value {value}, set_formula {formula}, clear {what: contents|formats|all}, write_range {data: 2D array}. location is any location object, including a stale-checked get_grid_view anchor. Every location is resolved and every op validated BEFORE anything is written, so a single bad edit refuses the whole batch and the file stays byte-for-byte unchanged. The batch then takes ONE backup (prev/anchor slots in .ks4xl-backups), does ONE atomic save, and runs ONE verify-after-write, which restores from the backup if the produced file fails to read back as intended. Formula edits are normalized and flag recalculation; each write_range op honors the 200,000-cell ceiling. A hazardous workbook refuses unless allow_loss is true; refuses while the file is open in Excel. Returns the count of edits applied and cells touched.

NameTypeReqDescription
allow_lossboolean
backupboolean
editsarrayyesEdits applied as ONE atomic batch: {op, location, ...}.
pathstringyes
verify_com

No output schema declared.

No examples provided.

audit_formulas ~198

Read-only formula intelligence for a range, one sheet (sheet alone), or the whole workbook (no scope): the formula list plus five safety reports. external_references flags formulas reaching into other workbooks; volatile lists always-recalculating functions (NOW, RAND, OFFSET, INDIRECT and kin); missing_cached_values names formula cells with NO stored result, which read as blank to every non-Excel consumer until a recalculation; error_cells catches #REF!, #NAME?, and the other error literals in cached results or formula text; and cross_sheet_dependencies summarizes which sheets' formulas depend on which. Each list is capped with exact counts and a truncated flag. Use it before and after structural edits, and to judge whether cached values can be trusted. Read-only; works while the file is open in Excel.

NameTypeReqDescription
location
pathstringyes
sheet

No output schema declared.

No examples provided.

clear_filter ~158

Remove the autofilter from a sheet and unhide the rows it hid, the reverse of set_filter. location or sheet picks the sheet; the sheet's active autofilter range is used when location is omitted. A sheet with no autofilter refuses (NOT_FOUND) rather than silently no-opping. Returns how many rows were unhidden. A hazardous workbook refuses unless allow_loss is true. Auto-backup: prev/anchor slots in .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
location
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

clear_range ~164

Clear 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.

NameTypeReqDescription
allow_lossboolean
backupboolean
locationyes
pathstringyes
sheet
verify_com
whatstring

No output schema declared.

No examples provided.

copy_range ~199

Copy 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.

NameTypeReqDescription
adjust_formulasboolean
allow_lossboolean
backupboolean
destyesWhere the result lands (its top-left cell).
pathstringyes
sheet
sourceyesThe range to read from.
verify_com
whatstring

No output schema declared.

No examples provided.

copy_workbook ~133

Copy 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.

NameTypeReqDescription
dststringyes
overwriteboolean
srcstringyes

No output schema declared.

No examples provided.

create_table ~223

Turn a range into an Excel table (ListObject) named name. With header true the first row supplies the column names (deduplicated); style is a built-in style; row_stripes and col_stripes toggle banding. totals maps columns to a function (sum, average, count, min, max...). Refuses an overlap with an existing table, and a name already taken by a table or defined name. Hazardous workbooks refuse unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
col_stripesboolean
headerboolean
locationyes
namestringyes
pathstringyes
row_stripesboolean
sheet
stylestring
totals
totals_rowboolean
verify_com

No output schema declared.

No examples provided.

create_workbook ~147

Create 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.

NameTypeReqDescription
overwriteboolean
pathstringyes
sheets

No output schema declared.

No examples provided.

diagnose_workbook ~285

The 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.

NameTypeReqDescription
pathstringyes

No output schema declared.

No examples provided.

disable_tools ~123

Disable previously enabled tool packs for this session and reclaim their context; the lite core always stays on. Idempotent. The result reports the packs just disabled, the approximate tokens removed, and the remaining surface. packs takes the same names as enable_tools (its description carries the menu) or ['everything']. Calling a tool from a disabled pack does not dead-end: the refusal names the owning pack and the exact enable_tools call to turn it back on. Refuses when the host pins the surface with KS4XL_PACK_POLICY=locked.

NameTypeReqDescription
packsarrayyes

No output schema declared.

No examples provided.

enable_tools ~323

Enable optional tool packs mid-session (sessions start lite). Idempotent; reports tokens added. packs = names below or ['everything']; disable_tools reverses it. Refuses under KS4XL_PACK_POLICY=locked. Task map: conditional formatting, data validation, named styles, images, charts, advanced table ops, named ranges -> design; page layout, headers/footers, protection, comments, whole-file export, external links, VBA, pivot and connection info -> io; recalculate, real pivots, PDF, render, convert, encrypt, autofit, sparklines, goal seek -> com. Packs: - design (~4.3k): workbook design and rich features: named cell styles, format painter, style-bloat audit, conditional formatting, data validation, images, charts (create/list/delete), advanced table lifecycle (columns, totals, resize, banding), and named ranges (define, scope, LAMBDA, cleanup) - io (~3.0k): page layout and print, headers/footers, advisory protection, legacy comments, multi-sheet export, and the read-side inspectors: external links, VBA, existing pivots, data connections - com (~3.1k): drives a private hidden Excel instance (Windows + Excel required): real pivot tables, fidelity recalculation, goal seek, PDF export, sheet render to image, format conversion, real encryption, sparklines, true autofit, opens-clean validation, and honest status; never touches your open Excel session

NameTypeReqDescription
packsarrayyes

No output schema declared.

No examples provided.

export_range ~189

Export a range, table, or sheet to CSV, TSV, or JSON. location defaults to the true used range; {table} exports a table. values is cached | formula | both; the result states the mode used. out_file writes a file; otherwise text returns inline. The target is guarded: never the source workbook, a workbook extension, a reserved device name, or .ks4xl-backups; an existing file needs overwrite, which keeps a .bak first. Filter-hidden rows export like any other row. Multi-sheet is export_file, io pack. Read-only.

NameTypeReqDescription
fmtstring
headerboolean
location
out_file
overwriteboolean
pathstringyes
recordsboolean
sheet
valuesstring

No output schema declared.

No examples provided.

find_cells ~181

Search cell values and/or formulas across a workbook, sheet, or range and return EVERY match with its unambiguous address (the plural sibling of the single-target search location selector). match is exact, contains, or regex (timeout-guarded, so a pathological pattern refuses instead of hanging); look_in is values, formulas, or both; a formula cell's searchable value is its last cached one. Results page with limit and offset and report the total match count. Read-only; works while the file is open in Excel.

NameTypeReqDescription
limitinteger
location
look_instring
matchstring
match_caseboolean
offsetinteger
pathstringyes
querystringyes
sheet

No output schema declared.

No examples provided.

format_cells ~192

Apply formatting to a range, merging onto the existing style so unspecified attributes are preserved. number_format is an Excel format code; font is {name, size, bold, italic, underline, strike, color}; fill is {color} or {pattern, fg, bg}; border is {style, color, sides}; alignment is {horizontal, vertical, wrap_text, text_rotation, indent}; colors are hex. Named styles and conditional formats: design pack. Hazard-gated (allow_loss overrides); auto-backup; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
alignment
allow_lossboolean
backupboolean
border
fill
font
locationyes
number_format
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

get_cells ~151

Read many individually addressed cells in one call, the scatter complement to the rectangular read_range. cells is a list of A1 strings or location objects, each resolving to ONE cell (1,000-cell ceiling); values is cached, formula, or both, and every returned value carries the honest label (cached, absent, formula, value), so a formula with no cached value is never passed off as blank. Read-only; works while the file is open in Excel.

NameTypeReqDescription
cellsarrayyesIndividually addressed cells: A1 strings or location objects, each resolving to ONE cell.
pathstringyes
sheet
valuesstring

No output schema declared.

No examples provided.

get_grid_view ~289

A compact, token-efficient projection of a sheet or range: the true used range, a markdown table with A1 addressing (column letters across the top, row numbers down the side), formula and merged-cell markers, dimensions, and the hazard summary, so an agent can see the grid without a per-cell JSON dump. location defaults to the sheet's used range. values='cached' shows last calculated values with formula cells marked (the florin character U+0192 marks a formula with no cached value); 'formula' shows the formula strings. The view paginates with max_rows and max_cols (caps 200 and 100) and reports truncated flags so the caller knows when to page. formula_cells maps addresses to their formula strings; merged ranges intersecting the view are listed. The result's anchor is a token for the shown rectangle: {"anchor": token} addresses it in any positional tool, refusing STALE_ANCHOR if the region changed since this view; cells inside stay plain A1. Read-only; works while the file is open in Excel. Pair it with apply_edits to edit what you see.

NameTypeReqDescription
location
max_colsinteger
max_rowsinteger
pathstringyes
sheet
valuesstring

No output schema declared.

No examples provided.

get_server_info ~121

Report 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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_table ~152

Read a table's data by its name (case-insensitive). columns projects a subset; values is cached | formula | both (the honest calc story); records true returns row objects keyed by column name. Returns the table ref, the column names, and the data rows without the header or totals row; filter or page big tables with query_range and a {table} location. Advanced table ops (columns, totals, resize, banding): manage_table (design pack). Read-only; nothing is written.

NameTypeReqDescription
columnsTable column names to project.
namestringyes
pathstringyes
recordsboolean
valuesstring

No output schema declared.

No examples provided.

get_workbook_metadata ~109

Read 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.

NameTypeReqDescription
pathstringyes

No output schema declared.

No examples provided.

get_workflows ~144

Recommended tool sequences for common multi-step spreadsheet tasks, each step naming the tool, the rationale, and the pack it lives in (lite is always on; enable_tools loads the rest). Call with no task to list the available tasks (merge-workbooks, report-build, data-cleanup, formatting-audit-and-fix, safe-edit-of-rich-workbook, migrate-from-incumbent); call with task='<name>' for that task's step-by-step recipe and notes. Steps naming COM-tier tools that have not shipped yet are marked forthcoming rather than pretended present. Pure guidance: reads nothing, changes nothing.

NameTypeReqDescription
task

No output schema declared.

No examples provided.

import_data ~219

Import CSV, TSV, or JSON into a sheet at an anchor. Pass source (inline text) or source_file (a path); fmt auto-detects from the extension. location is the top-left anchor (default A1). A cell whose text begins with =, +, -, or @ is written as TEXT to block formula injection unless formulas is true. An import past the 200,000-cell write ceiling refuses rather than dropping rows. A hazardous workbook refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
delimiter
encodingstring
fmtstring
formulasboolean
headerboolean
location
pathstringyes
sheet
source
source_file
verify_com

No output schema declared.

No examples provided.

manage_backups ~334

Manage the automatic backups in the hidden .ks4xl-backups folder next to each mutated workbook: two rotating slots per file, prev (state before the most recent mutation) and anchor (session start). action='list': slot files with sizes and mtimes plus orphaned slot folders; give path for one workbook or directory for a folder. action='restore': overwrite path with source 'prev' or 'anchor'; the current content rotates into prev FIRST so a restore is itself undoable, the payload is validated as a real workbook before the atomic replace, and files open in Excel refuse. action='purge': delete backups; scope is 'orphans' (slot folders whose workbook is gone) or 'slots' (one workbook's pair); dry_run defaults to TRUE and only reports. action='snapshot': save a permanent DTG-stamped copy, YYYYMMDD_HHMM_<name>, optional label and dest_dir; snapshots are never rotated and no purge scope touches them. LIMIT, stated loudly: prev holds the state before the LAST mutation this server made, so damage that lands AFTER the last save (crash, disk, another program) costs that final edit; only a snapshot habit covers it. Lost or corrupt file? get_workflows task='recover-workbook' is the walkthrough.

NameTypeReqDescription
actionstringyes
dest_dir
directory
dry_runboolean
label
path
scope
source

No output schema declared.

No examples provided.

manage_hyperlink ~220

Manage cell hyperlinks. action is add (location, target as a URL or an in-workbook 'Sheet!A1' reference, optional display text and tooltip), remove (location), or list (read-only). On add, display replaces the cell's value; with no display an empty cell shows the target. remove strips only the link: the cell's text and style stay. On list it surfaces both real cell hyperlinks and HYPERLINK() formula links so an audit sees every kind. For the mutating actions: a hazardous workbook refuses unless allow_loss is true; auto-backup to prev/anchor slots in .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
actionstringyes
allow_lossboolean
backupboolean
display
location
pathstringyes
sheet
target
tooltip
verify_com

No output schema declared.

No examples provided.

manage_worksheet ~267

Manage 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.

NameTypeReqDescription
actionstringyes
allow_lossboolean
backupboolean
index
new_name
pathstringyes
sheet
state
verify_com

No output schema declared.

No examples provided.

modify_grid_structure ~364

Insert or delete rows or columns at a position and REWRITE EVERY REFERENCE so the workbook stays coherent: formulas on every sheet (cross-sheet refs included), defined names, data validations, conditional-format ranges, table refs, and merged ranges all shift with the edit. action is insert_rows, delete_rows, insert_cols, or delete_cols; at is the 1-based row number or column letter where the edit starts (a cell like 'B7' or a location object also works, using its top-left); count edits that many at once. Whole-column spans like =SUM(B:B) and whole-row spans like $1:$2 shift on their own axis; an edit on the other axis leaves them alone (Excel's behavior). A reference wholly inside a deleted band becomes #REF! and the new-#REF! count is reported, never hidden; an insert that would push value-bearing cells off the grid edge refuses. Returns per-kind rewrite counts. 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; the prev slot is the undo for a delete. Refuses while open in Excel.

NameTypeReqDescription
actionstringyes
allow_lossboolean
atyesWhere the insert or delete starts: a 1-based row number (5), a column letter ('B'), an A1 cell ('B7', whose row or column is used), or a location object.
backupboolean
countinteger
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

move_range ~169

Move 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.

NameTypeReqDescription
allow_lossboolean
backupboolean
destyesWhere the result lands (its top-left cell).
pathstringyes
sheet
sourceyesThe range to read from.
verify_com

No output schema declared.

No examples provided.

query_range ~499

Filter, project, sort, paginate, and aggregate a range SERVER-SIDE so an agent reads only the rows and columns it needs instead of a whole sheet. location defaults to the sheet's true used range. With header=true the first row names the columns (otherwise the A1 letter does). where is a list of {column, op, value} predicates joined by match ('all' or 'any'); ops: eq, ne, gt, ge, lt, le, contains, startswith, endswith, regex, in, not_in, is_blank, not_blank. columns projects a subset; order_by is a list of {column, dir} specs (unknown directions refuse); offset and limit page; distinct dedupes. aggregate is a list of {column, func} (count, count_nonblank, count_distinct, sum, avg, min, max, first, last), optionally per group_by (records=true emits objects). Semantics: predicates read CACHED and literal values (uncalculated formulas read as blank; recalc for exact results); gt/ge/lt/le compare numerically when both sides coerce, else case-folded text; blanks never satisfy ordered comparisons; regex is timeout-guarded. Aggregates follow Excel: sum/avg/min/max consume NUMERIC cells only (text and booleans ignored even when text looks numeric; exclusions are reported); count is the RAW row count, unlike Excel COUNT; min/max fall back to text when no numbers exist. Filter-hidden rows are read and aggregated like any other row, unlike SUBTOTAL; use where to drop them. Read-only.

NameTypeReqDescription
aggregateAggregations, {column, func}, optionally per group_by.
columnsColumns to project: header names, letters, or 1-based numbers.
distinctboolean
group_byOne column to group by, or several.
headerboolean
limit
location
matchstring
offsetinteger
order_bySort specs, {column, dir}; unknown directions refuse.
pathstringyes
recordsboolean
sheet
valuesstring
whereFilter predicates, {column, op, value}, joined by match.

No output schema declared.

No examples provided.

read_range ~156

Read 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.

NameTypeReqDescription
locationyes
pathstringyes
sheet
valuesstring

No output schema declared.

No examples provided.

replace_cells ~289

Find-and-replace across a workbook, sheet, or range. match is exact (whole cell), contains (literal substring), or regex (timeout-guarded; backreferences like \1 work in replace). look_in 'values' rewrites literal cells, 'formulas' rewrites formula text (the cell stays a formula, normalized), 'both' does both. dry_run=true previews every change without touching the file; a real run validates the whole plan first, applies it as ONE batch, and reports cells changed and occurrences replaced. A replaced value that parses as a number is written as a number; replacement text beginning with =, +, -, or @ is written as TEXT to block formula injection unless formulas is true. A hazardous workbook refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
dry_runboolean
findstringyes
formulasboolean
location
look_instring
matchstring
match_caseboolean
pathstringyes
replacestringyes
sheet
verify_com

No output schema declared.

No examples provided.

set_cell ~183

Write 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.

NameTypeReqDescription
allow_lossboolean
backupboolean
locationyes
pathstringyes
sheet
valueyesA cell value: text, a number, a boolean, or null to clear. A string beginning with '=' is stored as a formula.
verify_com

No output schema declared.

No examples provided.

set_cells ~177

Write many individually addressed cells as ONE atomic batch, the scatter complement to write_range. cells is a list of {cell, value} items (cell is an A1 string or a location object resolving to one cell; 1,000-cell ceiling); every address is resolved BEFORE anything is written, so one bad item refuses the whole batch untouched. '=' strings become formulas, normalized. A hazardous workbook refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
cellsarrayyesScatter writes, {cell, value}; every address resolves before anything is written.
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

set_dimensions ~448

Set column widths and row heights, hide rows or columns, group them into collapsible outline levels, and service an autofit request. column_widths maps column letters or indices to widths in Excel character units; row_heights maps row numbers to heights in points; autofit_columns sizes columns to content as a best-effort APPROXIMATION (true autofit needs Excel via the com pack). Grouping is Excel's outline: group_rows and group_columns take spans of {start, end, level 1-7, collapsed}, the collapse bracket a budget or financial model is built around; ungroup_rows and ungroup_columns clear a span's level and unhide it; outline_summary {below, right} says which side the total sits on. Read the current outline back from get_workbook_metadata, which reports it per sheet when a sheet has one. A hazardous workbook refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
autofit_columnsColumn letters, e.g. ['A', 'C'].
backupboolean
column_widths
group_columnsOutline spans, {start, end, level 1-7, collapsed}. Rows take numbers, columns take letters or numbers.
group_rowsOutline spans, {start, end, level 1-7, collapsed}. Rows take numbers, columns take letters or numbers.
hide_columnsColumn letters, e.g. ['A', 'C'].
hide_rows1-based row numbers.
outline_summary
pathstringyes
row_heights
sheet
ungroup_columnsOutline spans, {start, end, level 1-7, collapsed}. Rows take numbers, columns take letters or numbers.
ungroup_rowsOutline spans, {start, end, level 1-7, collapsed}. Rows take numbers, columns take letters or numbers.
verify_com

No output schema declared.

No examples provided.

set_filter ~205

Apply an autofilter over a range whose first row is the header, and actually hide the non-matching rows: an .xlsx stores filter CRITERIA, not hidden state, so criteria (a list of {column, op, value}, ops as in query_range, combined as AND) are evaluated here over cached and literal values; a row whose tested cell holds an uncalculated formula stays visible with a warning. A hazardous workbook refuses unless allow_loss is true. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
criteriaAutofilter criteria, {column, op, value}, combined as AND. Rows that fail are actually hidden, since .xlsx stores criteria and not state.
locationyes
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

set_formula ~168

Write a formula to a single cell, or fill a range where each cell gets the formula with its relative references shifted by that cell's offset (Excel copy semantics; absolute $ anchors stay put). Formulas are normalized so modern functions do not land as #NAME?, and the workbook is flagged to recalculate on its next open; stored cached results stay stale until then (the recalculate tool in the com pack populates them). Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
formulastringyes
locationyes
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

set_merge ~222

Merge or unmerge cell ranges, or list every merge. action is merge (location is the multi-cell range), unmerge (location must be the exact stored merged range), or list (read-only, one sheet or the whole workbook). Excel merge semantics: only the top-left value survives, so a merge whose absorbed cells hold values REFUSES until you pass confirm_data_loss=true, then reports exactly which values were discarded; overlapping an existing merge refuses. Unmerge keeps the surviving top-left value and leaves the rest blank. For the mutating actions: a hazardous workbook refuses unless allow_loss is true; auto-backup to prev/anchor slots in .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
actionstringyes
allow_lossboolean
backupboolean
confirm_data_lossboolean
location
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

set_view ~205

Set sheet-view state in one call: freeze panes (freeze='B2' locks the rows above and columns left of it; 'clear' removes), split panes (split={x, y} positions in points, exclusive with freeze), gridlines and headings visibility, zoom (10 to 400 percent), the active selection (an A1 cell or range), and the sheet tab color (6-digit hex or 'clear'). Unset parameters keep their current values; sheet defaults to the active sheet. Auto-backup to .ks4xl-backups; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
freeze
gridlines
headings
pathstringyes
selection
sheet
split
tab_color
verify_com
zoom

No output schema declared.

No examples provided.

set_workbook_properties ~209

Set core document properties (title, author, subject, keywords, category, comments) and calc settings: calc_mode ('auto', 'autoNoTable', 'manual'), full_calc_on_load, and iterative calculation (iterative_calc with max_iterations and max_change bounds for circular references). Only given parameters change; with none it reports current values read-only. Manual mode means no recalc on Excel open, so caches go stale; the result says so. Auto-backup; atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
author
backupboolean
calc_mode
category
comments
full_calc_on_load
iterative_calc
keywords
max_change
max_iterations
pathstringyes
subject
title
verify_com

No output schema declared.

No examples provided.

sort_range ~198

Sort a range or table body by one or more keys, writing the rows back reordered. keys is a list of {column, order}: header name, letter, or 1-based index; asc or desc; later keys break ties. has_header keeps the first row put. Moved formulas shift relative refs (Excel semantics); keys compare cached values, warning when uncalculated. Filter-hidden rows stay pinned and unsorted, as in Excel. Hazardous workbooks need allow_loss. Auto-backup (prev is the undo); atomic verified save. Refuses while open in Excel.

NameTypeReqDescription
allow_lossboolean
backupboolean
has_headerboolean
keysarrayyesSort keys, {column, order}; later keys break ties.
locationyes
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

validate ~219

Run read-only correctness checks and return one report. checks (default ['structure', 'references', 'calc_staleness']): structure (package opens clean, sheet integrity), references (#REF!/#NAME? and the other error cells), names (broken defined names), merges (overlapping or orphaned merged ranges), tables (duplicate names, broken refs, overlaps), formatting_bloat (the audit_styles counters against the 64,000-format ceiling), hazards (the round-trip scan as a check), external_links (links reported, not repaired), calc_staleness (formulas lacking cached values, which read as blank outside Excel). Returns {passed, results: {check: {passed, findings}}}; findings keep the underlying ops' shapes where those exist, and passed=false means findings, not a failed call. Read-only, always; repairs live in the editing tools. Works while the file is open in Excel.

NameTypeReqDescription
checks
pathstringyes

No output schema declared.

No examples provided.

write_range ~185

Write 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.

NameTypeReqDescription
allow_lossboolean
backupboolean
dataarrayyesRows of cell values, rectangular: every row the same length.
locationyes
pathstringyes
sheet
verify_com

No output schema declared.

No examples provided.

Common questions

What is the KitchenSink4XL MCP server?

KitchenSink4XL is an MCP server listed in the public MCP registry as io.github.KitchenSink4AI/kitchensink4xl. Excel (.xlsx) MCP server: calculated/cached/missing labels on every value, formulas, verified writes. This page covers its PyPI package (kitchensink4xl).

Is the KitchenSink4XL MCP server safe to use?

KitchenSink4XL scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the KitchenSink4XL MCP server expose?

KitchenSink4XL exposes 40 tools: get_server_info, create_workbook, copy_workbook, get_workbook_metadata, diagnose_workbook, and 35 more. Their descriptions and schemas cost roughly 8,687 tokens of context every time the server is loaded.

Is the KitchenSink4XL MCP server still maintained?

KitchenSink4XL is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.