# KitchenSink4PPT (pypi · kitchensink4ppt)

PowerPoint (.pptx) MCP server: editable vector diagrams, tables, budgeted reads, render-to-verify

- Trust score: 73/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- pypi · `kitchensink4ppt`: 73/100 (this document), [markdown](https://verifymcp.io/servers/nometalalchemist-kitchensink4ppt/kitchensink4ppt.md), [page](https://verifymcp.io/servers/nometalalchemist-kitchensink4ppt/kitchensink4ppt)

## Channel facts

- Registry: `pypi`
- Package: `kitchensink4ppt`
- Version: `1.2.3`
- 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-09-21.

- **Supply Chain Security**: 99/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it.
  - 3 of 21 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 4 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4473 tokens (~178/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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 (100% 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 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the KitchenSink4PPT MCP server?

KitchenSink4PPT runs locally as a PyPI package, launched with uvx kitchensink4ppt. 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 nometalalchemist-kitchensink4ppt -- uvx kitchensink4ppt
```

### Cursor

```json
{
  "mcpServers": {
    "nometalalchemist-kitchensink4ppt": {
      "command": "uvx",
      "args": [
        "kitchensink4ppt"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "nometalalchemist-kitchensink4ppt": {
      "command": "uvx",
      "args": [
        "kitchensink4ppt"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add nometalalchemist-kitchensink4ppt -- uvx kitchensink4ppt
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add nometalalchemist-kitchensink4ppt --command uvx --arg kitchensink4ppt
```

### Hermes

```yaml
mcp_servers:
  nometalalchemist-kitchensink4ppt:
    command: "uvx"
    args: ["kitchensink4ppt"]
```

### Netclaw

```json
{
  "McpServers": {
    "nometalalchemist-kitchensink4ppt": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "kitchensink4ppt"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add nometalalchemist-kitchensink4ppt -t stdio -c uvx -a kitchensink4ppt
```

### Other

```json
{
  "mcpServers": {
    "nometalalchemist-kitchensink4ppt": {
      "command": "uvx",
      "args": [
        "kitchensink4ppt"
      ]
    }
  }
}
```

## 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-09-20 (score 73, +17)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.63 → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified
- [functional] Destructive annotations: All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
- [functional] Package version: 1.2.2 → 1.2.3

### 2026-09-19 (score 56, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 55, −15)

- [security regression] Malware scan: pass → unverified

### 2026-09-17 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 69, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 54, −14)

- [security regression] Malware scan: pass → unverified

### 2026-09-12 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 67, +67)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.30 → unverified
- [security improvement] CVE-2026-32871 no longer affects this package
- [security improvement] Known CVEs: fail → pass
- [security improvement] Source repository: fail → pass
- [functional regression] Schema quality: 3964 → 4473
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Score status: failed → scored
- [functional] First check of Schema quality: unverified
- [functional] Schema quality: excellent → good
- [functional] Package version: 1.1.3 → 1.2.2

## MCP tools (25)

### `get_presentation_view` (~217 tokens)

Get Presentation View

The anchored markdown projection of a deck, THE cheap way to read
it: slide headers with durable [s:id] anchors, one block per shape
with a stable [a:hex] anchor, tables as pipe tables with t:hex:rNcN
cell addresses (1-based there; table tools take 0-based row/col),
notes as quoted blocks. Feed the anchors to apply_edits. scope: None
for all slides, an index, {"slide_id": N}, or a list. detail:
"outline", "text" (default), or "full" (geometry too). Budgeted: a deck
too large to render whole returns whole slides plus a "page" block
giving the omitted count and the offset that continues; limit/offset
page in slides. Shape and diagram editing:
enable_tools(packs=['graphics']).

Input parameters:

- `detail` (string)
- `file_path` (string, required)
- `limit`
- `offset` (integer)
- `scope`

### `apply_edits` (~266 tokens)

Apply Edits

Batch editor: many edits, one lock, one backup, one atomic save.
Each edit is {"op": name, ...params} addressed by a view "anchor" (from
get_presentation_view) or explicit {"slide", "shape"/"table"} keys. Ops:
set_text, set_shape (graphics pack), set_table_cells (tables-charts
pack), search_and_replace, set_placeholder_text, format_text
(graphics pack), delete_shape (graphics pack). Every location is
resolved BEFORE anything mutates; any stale anchor refuses the whole
batch listing every failed index, and result.changed maps op index to
outcome. These ops EDIT existing content; nothing here inserts shapes,
tables, or slides. Creation tools live in the packs (enable_tools).
atomic must stay True: v1 has no partial-apply mode. Saves atomically
with two-slot backup; backup=False skips rotation. Use this when a
change needs two or more edits; for a single edit use the standalone
tool (set_shape, format_text, set_table_cells, set_placeholder_text,
search_and_replace, delete_shape).

Input parameters:

- `atomic` (boolean)
- `backup` (boolean)
- `edits` (array, required)
- `file_path` (string, required)

### `get_text` (~218 tokens)

Get Text

Plain text of the deck in reading order: shapes in spTree order,
table cells tab-joined, fields rendering their cached text. scope: None
for all slides, a 0-based index, {"slide_id": N}, or a list;
include_notes=True appends speaker notes. Budgeted, paging in whole
slides: slide_count stays the deck's true total and a "page" block
gives the omitted count and the next offset; limit/offset page
explicitly. Rendered-appearance checks live in the assembly-export
pack.
live='auto' edits the open PowerPoint copy when the file is locked by
it (UNSAVED until live_save, com pack); 'force' targets the open
session; 'off' refuses locked files. For edit anchors, use
get_presentation_view.

Input parameters:

- `file_path` (string, required)
- `include_notes` (boolean)
- `limit`
- `live` (string)
- `offset` (integer)
- `scope`

### `find_text` (~214 tokens)

Find Text

Search the deck's text. Returns every match with slide index, shape
id, paragraph index, and character offsets, exactly the addresses
format_text (graphics pack) and apply_edits consume. regex=True treats
query as a regular expression (guarded against catastrophic
backtracking). Matches
text as displayed, not raw XML, so search for & rather than &amp;.
count is always the true total; a "page" block gives the omitted
count and next offset when more matched than the budget fits.
compact=True returns matches as a fields header plus one array each.
Formatting-aware replacement lives in the graphics pack:
enable_tools(packs=['graphics']). Use this to locate text; to read it
in order, use get_text.

Input parameters:

- `compact` (boolean)
- `file_path` (string, required)
- `include_notes` (boolean)
- `limit`
- `offset` (integer)
- `query` (string, required)
- `regex` (boolean)
- `scope`

### `search_and_replace` (~182 tokens)

Search and Replace

Deck-wide find and replace, safe across fragmented runs (each
replacement keeps the first run's formatting), SmartArt node text
included. regex=True enables capture groups (refused live); matches
overlapping slide-number/date fields are skipped. Bulk cell rewrites:
set_table_cells (tables-charts pack). Saves atomically with two-slot
backup. live='auto' edits the open PowerPoint copy of a locked file;
'force' targets the open session; 'off' refuses locked files.
Batches: apply_edits.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `find` (string, required)
- `include_notes` (boolean)
- `live` (string)
- `match_case` (boolean)
- `regex` (boolean)
- `replace` (string, required)
- `scope`

### `insert_slide` (~160 tokens)

Insert Slide

Add a slide built from a layout (name, or 0-based global index;
list_elements kind='layouts' lists them), carrying the layout's
placeholder skeleton so inheritance binds.
position: 0-based final index, default end. Whole decks start via
create_presentation (design pack). Saves atomically with two-slot
backup; backup=False skips rotation. live='auto' edits the open
PowerPoint copy when the file is locked by it (UNSAVED until
live_save, com pack); 'force' targets the open session; 'off' refuses
locked files.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `layout` (required)
- `live` (string)
- `position`

### `delete_slide` (~154 tokens)

Delete Slide

Delete a slide and garbage-collect everything only it used: notes,
charts, embeddings, comments, custom-show references, section
membership; jump links to it are neutered. slide:
0-based index or {"slide_id": N}. Prefer set_slide_hidden (design pack)
when it might come back. Saves atomically with two-slot backup;
backup=False skips rotation. live='auto' edits the open PowerPoint copy
when the file is locked by it (UNSAVED until live_save, com pack);
'force' targets the open session; 'off' refuses locked files.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `live` (string)
- `slide` (required)

### `duplicate_slide` (~136 tokens)

Duplicate Slide

Deep-copy a slide: notes, charts with their embedded workbooks, and
embeddings are cloned and retargeted; layout and media stay shared by
design; creation GUIDs are regenerated (duplicates corrupt). slide:
0-based index or {"slide_id": N}. position: 0-based final index for the
copy, default right after the original. The design pack adds move and
hide: enable_tools(packs=['design']). Saves atomically with two-slot
backup; backup=False skips rotation.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `position`
- `slide` (required)

### `reorder_slides` (~118 tokens)

Reorder Slides

Rearrange the whole deck in one call. order: every current 0-based
slide index exactly once, in the desired new sequence (a permutation;
partial lists refuse). Durable slide_ids and view anchors survive
reordering, plain indices do not. For moving ONE slide, move_slide in
the design pack is simpler: enable_tools(packs=['design']). Saves
atomically with two-slot backup; backup=False skips rotation.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `order` (array, required)

### `set_placeholder_text` (~182 tokens)

Set Placeholder Text

Fill a layout placeholder (styling inherits from the layout).
placeholder: "title", "subtitle", "body"/"content" (each matches both
body and obj placeholders; exact type wins), a raw ph type, or an idx
int (idx/paragraphs= file-mode only). text: newline = paragraph,
leading tabs = levels; or paragraphs=[{"text": str, "level": 0..8}].
Free text boxes: graphics pack. Saves
atomically with two-slot backup; backup=False skips rotation.
live='auto' edits the open PowerPoint copy of a locked file.
Batches: apply_edits.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `live` (string)
- `paragraphs`
- `placeholder` (required)
- `slide` (required)
- `text`

### `fit_text` (~157 tokens)

Fit Text

Shrink overflowing text to fit: estimates the largest uniform
font scale (floor min_size pt) via an average-glyph-width heuristic,
rewrites explicit run sizes (or writes a normAutofit fontScale when
sizes are inherited), and enables normAutofit. shape=None fits every
overflowing text shape on the slide; one that cannot fit at min_size
reports still_overflowing. An ESTIMATE (no font metrics): verify
with export_slide_images (assembly-export pack). Saves atomically
with two-slot backup; backup=False skips rotation.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `min_size` (number)
- `shape`
- `slide` (required)

### `get_slide_info` (~187 tokens)

Get Slide Info

One slide in depth: durable slide_id, layout, hidden flag, notes
presence, and every shape with id, name, kind, geometry in inches,
placeholder type, and text preview. Shape ids here are the addresses
every editing tool takes; edit what it lists via the graphics pack.
slide: 0-based index or {"slide_id": N}. Budgeted: a crowded slide
returns a "page" block with the omitted count and next offset.
All slides: get_presentation_view. live='auto' edits the open PowerPoint copy when
the file is locked by it (UNSAVED until live_save, com pack); 'force'
targets the open session; 'off' refuses locked files.

Input parameters:

- `file_path` (string, required)
- `limit`
- `live` (string)
- `offset` (integer)
- `slide` (required)

### `get_presentation_info` (~98 tokens)

Get Presentation Info

Deck-level facts in one call: slide count and size, slide order with
durable ids and titles, masters and layouts, section list, and notes
presence. The cheap first look before get_presentation_view. To
enumerate one kind of element, use list_elements. Rendering,
validation, and PDF export live in the assembly-export pack:
enable_tools(packs=['assembly-export']).

Input parameters:

- `file_path` (string, required)

### `list_elements` (~252 tokens)

List Elements

THE multiplex enumerator, one kind per call: slides, shapes,
placeholders, tables, charts, images, diagrams (SmartArt frames with
their editable nodes), notes, sections, layouts, masters. Returns a
flat item list with ids and locations; slide-scoped
kinds honor scope (None = all slides, a selector, or a list). count is
always the true number found; a deck with more elements than fit the
per-call output budget returns a "page" block naming how many were held
back and the offset that continues, so nothing goes missing quietly.
limit/offset page explicitly, and compact=True returns a fields header
plus one array per item, about a third the size on large decks. Use it
to find layout names for insert_slide and shape ids for editing. The
packs (enable_tools) hold the tools that edit what this lists. For one
slide in depth, use get_slide_info; for edit anchors, use
get_presentation_view.

Input parameters:

- `compact` (boolean)
- `file_path` (string, required)
- `kind` (string, required)
- `limit`
- `offset` (integer)
- `scope`

### `set_hyperlink` (~167 tokens)

Set Hyperlink

Set a hyperlink on a shape or text range, replacing any link
already there. target: a shape id, or {"shape_id": N, "paragraph": P,
"start"?: S, "end"?: E} for a text range. Exactly one destination: url
(external) or to_slide (a jump by index or {"slide_id": N}, the
structure delete_slide knows how to neuter). tooltip sets hover text.
Navigation buttons pair with insert_shape (graphics pack). Saves
atomically with two-slot backup; backup=False skips rotation.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `slide` (required)
- `target` (required)
- `to_slide`
- `tooltip`
- `url`

### `remove_hyperlink` (~136 tokens)

Remove Hyperlink

Remove hyperlinks from a shape or text range. target: a shape id
(removes the shape-level link AND every run-level link inside the
shape) or {"shape_id": N, "paragraph": P, "start"?: S, "end"?: E} for
the covered runs only. Orphaned link rels are dropped; media playback
affordances (graphics pack av inserts) are left alone. Saves
atomically with two-slot backup; backup=False skips rotation.

Input parameters:

- `backup` (boolean)
- `file_path` (string, required)
- `slide` (required)
- `target` (required)

### `list_hyperlinks` (~119 tokens)

List Hyperlinks

Every hyperlink in scope (default all slides): external URLs and
jump-to-slide links, on shapes and on text runs, with broken-target
detection (missing rels, rels to deleted slides, empty URLs). The
addresses reported are exactly what set_hyperlink and remove_hyperlink
take. Media playback controls (insert_video/insert_audio, graphics
pack) are not hyperlinks and are not listed. Read-only; the file is
never modified.

Input parameters:

- `file_path` (string, required)
- `scope`

### `copy_presentation` (~124 tokens)

Copy Presentation

Copy a deck byte-for-byte, e.g. to a working copy before heavy
edits (create_snapshot names a DTG-stamped copy for you; this tool
takes an explicit dest_path). Refuses an existing dest_path unless
overwrite=True; an overwritten destination's previous content rotates
into its .ks4p-backups prev slot first, so the overwrite is undoable
via manage_backups restore. The source file is never modified.

Input parameters:

- `dest_path` (string, required)
- `file_path` (string, required)
- `overwrite` (boolean)

### `create_snapshot` (~139 tokens)

Create Snapshot

Save a DTG-stamped permanent copy: YYYYMMDD_HHMM_<name>.pptx (an
existing leading DTG in the name is replaced, not stacked), plus an
optional short label. Snapshots are the PERMANENT keepers alongside the
automatic prev/anchor slots: slots rotate on every mutation, snapshots
are never auto-pruned and manage_backups never touches them. Never
overwrites (collisions get a numeric suffix). The source file is not
modified. Take one before any large or risky editing pass.

Input parameters:

- `dest_dir`
- `file_path` (string, required)
- `label`

### `manage_backups` (~174 tokens)

Manage Backups

The automatic backups under .ks4p-backups/ next to each mutated
deck: prev (state before the last mutation) and anchor (session start).
action='list': slots for one file_path or a whole directory, plus
orphaned folders. action='restore': overwrite file_path from source
('prev', 'anchor', or a .pptx path); current content rotates into prev
FIRST so the restore is undoable, and the payload is validated before
the atomic replace. action='purge': scope 'orphans' or 'slots';
dry_run=True (default) reports only, dry_run=False deletes.

Input parameters:

- `action` (string, required)
- `directory`
- `dry_run` (boolean)
- `file_path`
- `scope`
- `source`

### `get_server_info` (~115 tokens)

Get Server Info

Report the KitchenSink4PPT server build: product and PyPI package
name, the version a client is connected to, the landing page, the
sibling servers in the KitchenSink4AI suite, the registered and lite
tool totals, the released test count, the active pack surface and its
token bill, and the host platform and Python. A read-only orient call
that needs no deck and touches no file, and the only tool that answers
WHAT you are connected to. diagnose covers the environment.

### `diagnose` (~189 tokens)

Diagnose Presentation

Self-check for this environment and, optionally, one file. Reports
export engine availability (PowerPoint COM vs LibreOffice), sandbox
state, KS4P mode/policy env, and the current pack surface with token
costs. With file_path: existence, size, PowerPoint lock state, whether
the package opens, and slide count, WITHOUT mutating anything. Output
is PASTE-SAFE by default: no absolute paths, so it can go straight into
a bug report; verbose=True adds the sandbox roots, engine locations,
and full file path for local troubleshooting. Run it first when any
tool refuses unexpectedly or an export engine seems missing. Reports
the update-check state; the only place the check runs. The validate
tool (assembly-export pack) does the real opens-clean check in
PowerPoint.

Input parameters:

- `file_path`
- `verbose` (boolean)

### `get_workflows` (~175 tokens)

Get Workflows

Step-by-step recipes for the common jobs, each naming the packs it
needs and the exact tool order: build-a-diagram, one-call-diagram,
equation-authoring (graphics), build-a-table-report (tables-charts),
template-deck-setup, master-restyle, accessibility-pass (design),
render-and-review, cross-deck-assembly, deck-merge, animate-a-build
(assembly-export), batch-edit-from-view (lite, the cheap loop),
review-cycle (review-sweeps), rebrand-pipeline (review-sweeps +
design), live-session (com). Call with no task for the
index, with a task name for full steps. Read the matching recipe
before your first deck edit of a session; it prevents most wrong-tool
detours.

Input parameters:

- `task`

### `enable_tools` (~345 tokens)

Enable Tools

Switch on optional tool packs mid-session; the tool list grows and
your client is notified to re-fetch it. Packs: 'graphics' (shapes,
connectors, groups, align, z-order, SVG to native editable shapes,
diagram generators, images, video/audio, text boxes, run formatting,
bullets, format painter, LaTeX equations); 'tables-charts' (tables:
create, bulk cells, merge, row/column surgery, borders, styles,
CSV/JSON; bar/line/pie/scatter/combo charts, formatting, data
readback); 'design' (create FROM template, apply layouts, theme
colors/fonts read AND write, brand extract/apply, layout guardrails,
slide size, hide/move, autofit report, slide/master backgrounds,
master and layout editing, accessibility audit/repair);
'assembly-export' (notes, sections, footers, PDF/PNG/handout export,
validation, text extraction, cross-deck copy, deck merge/split,
agenda slides, statistics, document properties, anonymize, custom
shows, slide transitions and entrance animations); 'review-sweeps'
(threaded comments, compare_decks, deck-wide font/color/language/logo
sweeps, compress); 'com' (PowerPoint status, zombie check, and
editing the deck OPEN in PowerPoint); 'everything' (all). The v1.0
names transitions-animations, review, sweeps, and com-live still
resolve to their new homes. Idempotent; reports approx token cost
added and the active surface. disable_tools reverses.

Input parameters:

- `packs` (array, required)

### `disable_tools` (~96 tokens)

Disable Tools

Switch pack tools back off to shrink the tool surface (the lite core
always stays on). Takes the same pack names as enable_tools, or
'everything'. Idempotent: already-disabled packs are reported, not
errors. Nothing about the presentation files changes; this only trims
what this session's client has to carry. Reports the approx token cost
removed and the remaining active surface.

Input parameters:

- `packs` (array, required)

## Diagnostics

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

## Score history

- 2026-09-21: 73
- 2026-09-20: 73
- 2026-09-19: 56
- 2026-09-18: 55
- 2026-09-17: 70
- 2026-09-16: 69
- 2026-09-15: 54
- 2026-09-14: 54
- 2026-09-13: 68
- 2026-09-12: 68
- 2026-09-11: 67
- 2026-09-10: 67
- 2026-09-09: 0
- 2026-09-08: 0
- 2026-09-07: 0
- 2026-09-06: 0
- 2026-09-05: 0
- 2026-09-04: 0
- 2026-09-03: 0
- 2026-09-02: 0
- 2026-09-01: 0
- 2026-08-31: 0

## Common questions

### What is the KitchenSink4PPT MCP server?

KitchenSink4PPT is an MCP server listed in the public MCP registry as io.github.nometalalchemist/kitchensink4ppt. PowerPoint (.pptx) MCP server: editable vector diagrams, tables, budgeted reads, render-to-verify. This page covers its PyPI package (kitchensink4ppt).

### Is the KitchenSink4PPT MCP server safe to use?

KitchenSink4PPT scores 73 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 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 KitchenSink4PPT MCP server expose?

KitchenSink4PPT exposes 25 tools: get_presentation_view, apply_edits, get_text, find_text, search_and_replace, and 20 more. Their descriptions and schemas cost roughly 4,320 tokens of context every time the server is loaded.

### Is the KitchenSink4PPT MCP server still maintained?

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

## Links

- PyPI project: https://pypi.org/project/kitchensink4ppt/
- Socket report: https://socket.dev/pypi/package/kitchensink4ppt
- Repository: https://github.com/KitchenSink4AI/KitchenSink4PPT
- Website: https://kitchensink4.ai/KitchenSink4PPT/
- Changelog RSS feed: https://verifymcp.io/servers/nometalalchemist-kitchensink4ppt/kitchensink4ppt.xml
- Changelog JSON feed: https://verifymcp.io/servers/nometalalchemist-kitchensink4ppt/kitchensink4ppt.json
- HTML version of this page: https://verifymcp.io/servers/nometalalchemist-kitchensink4ppt/kitchensink4ppt
