# slim-sheet (pypi · slim-sheet)

Spreadsheet MCP for any agent: reads xlsx/xls/ods/csv, SQL, cleaning, formulas, safe edits

- Trust score: 61/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-04

## Components

- pypi · `slim-sheet`: 61/100 (this document), [markdown](https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet.md), [page](https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet)

## Channel facts

- Registry: `pypi`
- Package: `slim-sheet`
- Version: `0.1.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-04.

- **Supply Chain Security**: 49/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 4 of 34 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to j4flmao/slim-sheet).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 59/100
  - 71% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 3129 tokens (~97/item across 32 items; 30 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (20% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**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 slim-sheet MCP server?

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

### Claude

```bash
claude mcp add j4flmao-slim-sheet -- uvx slim-sheet
```

### Cursor

```json
{
  "mcpServers": {
    "j4flmao-slim-sheet": {
      "command": "uvx",
      "args": [
        "slim-sheet"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "j4flmao-slim-sheet": {
      "command": "uvx",
      "args": [
        "slim-sheet"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add j4flmao-slim-sheet -- uvx slim-sheet
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "j4flmao-slim-sheet": {
      "type": "local",
      "command": [
        "uvx",
        "slim-sheet"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add j4flmao-slim-sheet --command uvx --arg slim-sheet
```

### Hermes

```yaml
mcp_servers:
  j4flmao-slim-sheet:
    command: "uvx"
    args: ["slim-sheet"]
```

### Netclaw

```json
{
  "McpServers": {
    "j4flmao-slim-sheet": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "slim-sheet"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add j4flmao-slim-sheet -t stdio -c uvx -a slim-sheet
```

### Other

```json
{
  "mcpServers": {
    "j4flmao-slim-sheet": {
      "command": "uvx",
      "args": [
        "slim-sheet"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 61, −15)

- [security regression] Malware scan: pass → unverified

### 2026-11-03 (score 76, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-11-02 (score 61, −15)

- [security regression] Malware scan: pass → unverified

### 2026-11-01 (score 76, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-31 (score 61, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-30 (score 76)

First indexed and scored.

## MCP tools (30)

### `overview` (~50 tokens)

Map a spreadsheet file (or list the spreadsheets in a folder; no path lists all allowed folders): sheets, used ranges, header row, columns and types. Call this first.

Input parameters:

- `path` (string)

Output parameters:

- `format` (string)
- `path` (string)
- `sheets` (array)
- `warnings` (array)

### `read` (~80 tokens)

Read cells as a table with A1 coordinates (sheet, range 'A1:F50', cursor). sheet='#vba' lists macros; range='Module1' shows its code.

Input parameters:

- `cursor`
- `format` (string)
- `max_tokens`
- `path` (string, required)
- `range`
- `sheet`

Output parameters:

- `next_cursor` (string|null)
- `rows` (array)
- `sheet` (string)
- `window` (string)

### `find` (~72 tokens)

Find cells containing text (or a regex) across sheets; returns Sheet!A1 addresses. Example: find(path='sales.xlsx', text='refund')

Input parameters:

- `max_results` (integer)
- `path` (string, required)
- `regex` (boolean)
- `sheet`
- `text` (string, required)

Output parameters:

- `hits` (array)

### `query` (~72 tokens)

Run one read-only SQL SELECT; tables are sheet names, quote names with spaces. Example: sql='SELECT "Region", sum("Total") FROM "Orders" GROUP BY 1'

Input parameters:

- `max_tokens`
- `offset` (integer)
- `path` (string, required)
- `sql` (string, required)

Output parameters:

- `columns` (array)
- `next_offset` (integer|null)
- `rows` (array)
- `total_rows` (integer)

### `profile` (~52 tokens)

Column statistics for a sheet: type, nulls, distinct, min, max, mean, median, top values. Optional columns list.

Input parameters:

- `columns`
- `path` (string, required)
- `sheet`

Output parameters:

- `columns` (array)

### `write` (~86 tokens)

Write a 2-D values array starting at range's top-left cell, e.g. values=[['Total', 120]]. Saves to <name>.slim.xlsx unless overwrite=true.

Input parameters:

- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `range` (string, required)
- `sheet` (string, required)
- `values` (array, required)

### `explain_formula` (~61 tokens)

Explain and check an Excel formula: steps, references, syntax/arity errors. Pass formula='=...' or path plus cell like 'Sheet1!C7'.

Input parameters:

- `cell`
- `formula`
- `path`
- `sheet`

### `build_report` (~129 tokens)

Build a branded, print-ready dashboard from a data sheet. Example: kpis=['Revenue=sum:Rev 2025|vs:Rev 2024:2024'], charts=['trend:Month:Total','table:Region:Total'], messages=['finding']

Input parameters:

- `brand`
- `charts`
- `data_sheet` (string, required)
- `kpis`
- `messages`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `sheet` (string)
- `subtitle`
- `title` (string, required)

### `clean` (~94 tokens)

Clean a table: ops from trim, collapse_spaces, remove_nonprintable, unify_null, numbers_from_text, normalize_dates, drop_empty_rows, drop_empty_cols, dedupe. Previews unless apply=true.

Input parameters:

- `apply` (boolean)
- `keys`
- `ops` (array, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `sheet`

### `anomalies` (~79 tokens)

Find suspicious cells (duplicates, types, outliers, typos); scope='formulas' audits models; scope='macros' rates VBA risks; scope='client' checks readiness for clients.

Input parameters:

- `columns`
- `max_results` (integer)
- `path` (string, required)
- `scope` (string)
- `sheet`

### `merge` (~123 tokens)

Join two tables on keys (how=left|inner|full|anti), or how=reconcile to label rows matched/different/only_left/only_right. keys=['ID'] or ['ID=Order No'].

Input parameters:

- `compare`
- `how` (string)
- `keys` (array, required)
- `max_tokens`
- `other_path` (string, required)
- `other_sheet`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `sheet`
- `tolerance` (number)

### `convert` (~103 tokens)

Convert to xlsx/csv/tsv/parquet/json by out_path extension; CSV: delimiter=';', encoding='cp1252', decimal=','. split_by='Region' splits; a folder exports VBA.

Input parameters:

- `decimal`
- `delimiter`
- `encoding`
- `mode` (string)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `sheet`
- `split_by`

### `diff` (~71 tokens)

Compare two files cell by cell, or row by row with key='ID'. Example: diff(path='a.xlsx', other_path='a.slim.xlsx')

Input parameters:

- `key`
- `max_results` (integer)
- `other_path` (string, required)
- `path` (string, required)
- `sheet`

Output parameters:

- `changes` (array)

### `undo` (~31 tokens)

Undo the last slim-sheet write to a file (every editing tool is journaled).

Input parameters:

- `path` (string, required)

### `evaluate` (~73 tokens)

Calculate a formula offline, or check it with check_only=true (target='2016'). Example: evaluate(path='x.xlsx', cell='Calc!C7')

Input parameters:

- `cell`
- `check_only` (boolean)
- `formula`
- `path`
- `sheet`
- `target`

### `describe_cell` (~71 tokens)

Everything about one cell: value, formula, format, note, validation; trace='precedents' or 'dependents' follows formulas across sheets.

Input parameters:

- `cell` (string, required)
- `depth` (integer)
- `path` (string, required)
- `sheet`
- `trace` (string)

### `style_sheet` (~110 tokens)

Make a table look professional in one call: header, number formats, totals, widths, print setup, and restyles the sheet's charts. preset=report|data|finance|striped|minimal|charts.

Input parameters:

- `brand`
- `number_format` (string)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `preset` (string)
- `range`
- `sheet` (string, required)
- `total_row`

### `what_if` (~86 tokens)

Change inputs in memory and see outputs move: op=delta|goal_seek|grid. Example: inputs=['Inputs!B3=8%'], outputs=['Model!B20']. Never writes.

Input parameters:

- `inputs` (array, required)
- `op` (string)
- `outputs` (array, required)
- `path` (string, required)
- `sheet`
- `target`

### `create_workbook` (~62 tokens)

Create a new empty branded .xlsx with the given sheet names. Example: create_workbook(path='out.xlsx', sheets=['Data','Summary'])

Input parameters:

- `brand`
- `overwrite` (boolean)
- `path` (string, required)
- `sheets`

### `sheet_ops` (~84 tokens)

Add, rename, delete, copy, move, hide or unhide a sheet (op=...). Renames also fix formulas that point to the sheet.

Input parameters:

- `new_name`
- `op` (string, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `position`
- `sheet` (string, required)

### `range_ops` (~164 tokens)

Edit a block: op=fill|copy|move|transpose|sort|replace|insert|delete|clear|split. Example: op='fill', range='D2:D200'. where="Status='Closed'" filters rows.

Input parameters:

- `by`
- `delimiter` (string)
- `desc` (boolean)
- `find`
- `formats_only` (boolean)
- `header` (boolean)
- `op` (string, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `range`
- `replace`
- `sheet` (string, required)
- `to`
- `values_only` (boolean)
- `what` (string)
- `where`

### `name_ops` (~75 tokens)

List, add or delete defined names. Example: name_ops(path, op='add', name='TaxRate', ref='Rates!B2')

Input parameters:

- `name`
- `op` (string, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `ref`

### `format_range` (~148 tokens)

Style a range: role ('title','header','total'...), bold, colors, number_format ('percent','m'...), align, border, merge, autofit.

Input parameters:

- `align`
- `autofit` (boolean)
- `bold`
- `border`
- `fill_color`
- `font_color`
- `font_size`
- `italic`
- `merge`
- `number_format`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `range` (string, required)
- `role`
- `sheet` (string, required)
- `valign`
- `wrap`

### `set_table` (~107 tokens)

Turn a range with a header row into a named Excel table; same name again resizes it. Example: set_table(path, sheet='Data', range='A1:D50', name='Sales', totals=true)

Input parameters:

- `name` (string, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `range` (string, required)
- `sheet` (string, required)
- `style` (string)
- `totals` (boolean)

### `rules` (~141 tokens)

Add a dropdown/input rule (kind=list|whole|decimal|date|text_length|custom) or highlight rule (greater_than|between|duplicates|top_n|color_scale|data_bar|formula...).

Input parameters:

- `allow_blank` (boolean)
- `fill_color` (string)
- `font_color` (string)
- `formula`
- `kind` (string, required)
- `message`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `range` (string, required)
- `sheet` (string, required)
- `value`
- `value2`
- `values`

### `add_chart` (~127 tokens)

Insert a clean branded chart (type=auto picks one) from data_range: header row + category column + series columns. Optional highlight='North'; replace=true swaps the chart at anchor.

Input parameters:

- `anchor`
- `brand`
- `data_range` (string, required)
- `highlight`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `replace` (boolean)
- `sheet` (string, required)
- `title`
- `type` (string, required)
- `x_title`
- `y_title`

### `pivot` (~118 tokens)

Summarise a table: rows=['Region'], values=['Total'], agg=sum|count|avg|min|max, columns='Month'. to_sheet saves it; native=true makes a real Excel PivotTable.

Input parameters:

- `agg` (string)
- `columns`
- `max_tokens`
- `native` (boolean)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `rows` (array, required)
- `sheet`
- `to_sheet`
- `values` (array, required)

### `recalc` (~46 tokens)

Recalculate every formula with LibreOffice so cached values are fresh (needs LibreOffice installed).

Input parameters:

- `out_path`
- `overwrite` (boolean)
- `path` (string, required)

### `sheet_layout` (~158 tokens)

Set how a sheet looks and prints: freeze, widths=['A=14'], heights, filter_range, hide, gridlines, zoom, print_area, landscape, fit_width, protect; workbook: calc_mode, protect_structure.

Input parameters:

- `calc_mode`
- `filter_range`
- `fit_width`
- `freeze`
- `gridlines`
- `heights`
- `hide`
- `landscape`
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `print_area`
- `protect`
- `protect_structure`
- `sheet` (string, required)
- `unhide`
- `widths`
- `zoom`

### `annotate` (~113 tokens)

Add a note, hyperlink or image to a cell, or remove objects: op=note|link|image|remove. Example: op='link', cell='B2', url='https://...'

Input parameters:

- `cell` (string, required)
- `image_path`
- `op` (string, required)
- `out_path`
- `overwrite` (boolean)
- `path` (string, required)
- `sheet` (string, required)
- `target` (string)
- `text`
- `url`

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet#diagnostics

## Score history

- 2026-11-04: 61
- 2026-11-03: 76
- 2026-11-02: 61
- 2026-11-01: 76
- 2026-10-31: 61
- 2026-10-30: 76

## Common questions

### What is the slim-sheet MCP server?

slim-sheet is an MCP server listed in the public MCP registry as io.github.j4flmao/slim-sheet. Spreadsheet MCP for any agent: reads xlsx/xls/ods/csv, SQL, cleaning, formulas, safe edits. This page covers its PyPI package (slim-sheet).

### Is the slim-sheet MCP server safe to use?

slim-sheet scores 61 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. 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 slim-sheet MCP server expose?

slim-sheet exposes 30 tools: overview, read, find, query, profile, and 25 more. Their descriptions and schemas cost roughly 2,786 tokens of context every time the server is loaded.

### Is the slim-sheet MCP server still maintained?

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

### What licence is the slim-sheet MCP server under?

slim-sheet declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/slim-sheet/
- Socket report: https://socket.dev/pypi/package/slim-sheet
- Repository: https://github.com/j4flmao/slim-sheet
- Changelog RSS feed: https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet.xml
- Changelog JSON feed: https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet.json
- HTML version of this page: https://verifymcp.io/servers/j4flmao-slim-sheet/slim-sheet
