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.

Sketchdex

NPM · SKETCHDEX · SCANNED SEP 25

An MCP server that lets AI agents draw hand-drawn Excalidraw diagrams as files on your machine.

Available components

+3 this week 78 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 Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5659 tokens (~217/item across 26 items; 19 tools + 7 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 Management70
  • Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_elements" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 21 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
Install

How do I install the Sketchdex MCP server?

Sketchdex runs locally as an npm package, launched with npx -y sketchdex. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · sketchdex

# add to Claude Code
claude mcp add lucasr1b-sketchdex -- npx -y sketchdex
// .cursor/mcp.json
{
  "mcpServers": {
    "lucasr1b-sketchdex": {
      "command": "npx",
      "args": [
        "-y",
        "sketchdex"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "lucasr1b-sketchdex": {
      "command": "npx",
      "args": [
        "-y",
        "sketchdex"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add lucasr1b-sketchdex -- npx -y sketchdex
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lucasr1b-sketchdex": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "sketchdex"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add lucasr1b-sketchdex --command npx --arg -y --arg sketchdex
# ~/.hermes/config.yaml
mcp_servers:
  lucasr1b-sketchdex:
    command: "npx"
    args: ["-y", "sketchdex"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "lucasr1b-sketchdex": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "sketchdex"
      ]
    }
  }
}
# add to Vellum
assistant mcp add lucasr1b-sketchdex -t stdio -c npx -a -y sketchdex
// mcp.json
{
  "mcpServers": {
    "lucasr1b-sketchdex": {
      "command": "npx",
      "args": [
        "-y",
        "sketchdex"
      ]
    }
  }
}
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.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 +1

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

  • 21 Sept 26 +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.

  • 19 Sept 26 +1

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

  • 17 Sept 26 +1

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

  • 15 Sept 26 +1

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

  • 13 Sept 26 +1

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

  • 12 Sept 26 +3
    • Stability: unverified → 0.27 ▲ functional
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 25 Sept 2026 · Analysed npm/sketchdex@0.1.2

Provenance No attestation

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

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 19 exposed · ~5,283 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
add_elements ~842

Append elements to a scene, leaving everything already there untouched. The usual way to draw something new.

NameTypeReqDescription
elementsarrayyesExcalidraw elements. Any field of a real element is honoured verbatim; what you omit gets a valid default (id, index, seed, version are generated). USE THIS FOR diagrams, layout, text, boxes, arrows…
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

check_scene ~146

Find layout problems by geometry instead of by looking: text hidden behind a filled shape drawn after it, captions running past the panel they sit in, labels too tall for their container, zero-size elements, broken arrow bindings, strays parked far off, exact duplicates. Each finding carries the element ids, so the fix is one update_elements call. Run it after a batch of drawing - it is far cheaper than a render and catches what a render would only show you if you looked closely.

NameTypeReqDescription
limitnumber–Max findings (default 60).
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

create_scene ~761

Make a new scene, optionally with its starting elements.

NameTypeReqDescription
elementsarray–Excalidraw elements. Any field of a real element is honoured verbatim; what you omit gets a valid default (id, index, seed, version are generated). USE THIS FOR diagrams, layout, text, boxes, arrows…
namestring––

No output schema declared.

No examples provided.

delete_elements ~99

Remove elements by id.

NameTypeReqDescription
idsarrayyes–
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

describe_scene ~113

What is on a scene, as structure rather than pixels: counts by type, overall bounds, and a rounded summary of each element with its id, position, size, text and bindings. Cheaper than read_scene and usually enough to plan an edit.

NameTypeReqDescription
limitnumber–Max elements to list (default 400).
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.
typestring–Only elements of this type.

No output schema declared.

No examples provided.

import_svg ~878

Draw by writing SVG. THE way to draw anything that has to look like something: a character, creature, object, vehicle, logo, illustration. This is what produces good figures; stacking shapes with add_elements does not. The result is hand-drawn, not pasted: every path becomes a real editable Excalidraw element (grouped as one piece), curves are re-spaced to hand-sized strokes and drawn with the sketchy pen, <circle>/<ellipse>/<rect> become native shapes. Write the SVG for SHAPE, PROPORTION and COLOUR and let the canvas supply the pen - do not fake wobble or hatching in the SVG. A recipe that works for a figure: * viewBox about 300 x 600 for a standing figure; import at width 350-450. * ONE closed path per body region - torso, each leg, each arm - tapered like a real limb (forearm ~60% of the upper arm, calf into a narrow ankle), plus head, hands, feet. Let them overlap; later paths draw on top. Then detail as separate strokes OVER the silhouette: plates, seams, webbing, a knee line. A few, not many. * Every shape: fill=<vibrant, character-accurate hex> stroke=<the scene ink from describe_scene, or a deep shade of the fill> stroke-width 2 to 2.5. Filled shapes with no stroke read as flat. * Flat colour, no shading. One solid fill per part; a darker part is a darker hex, not a hatched overlay or a shadow shape. The sketchy outline carries the drawing - texture on top of it looks overworked. * Proportion from a rule: 7-8 heads tall for heroic, 5-6 for stylised. Head first, derive the rest. * Then render_scene and LOOK; fix what is off. The first pass is usually mis-proportioned, the second is right. Supported: path (all commands), rect, circle, ellipse, line, polyline, polygon, g, transform, <style>/class, <use>/<defs>, presentation attributes, text. viewBox honoured exactly. Gradients flatten to their first stop; pass holeColor to punch compound-path holes.

NameTypeReqDescription
fillStylestring–Fill for every filled shape. Default solid. hachure for a lighter, sketchier piece (small shapes stay solid); cross-hatch for weight.
groupboolean–Group the result as one unit. Default true.
heightnumber–Optional bound on height.
holeColorstring–Backdrop colour used to punch compound-path holes.
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
roughnessnumber–0 precise, 1 sketchy (default in sketch mode), 2 very sketchy.
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.
stepnumber–Anchor spacing for curves in sketch mode, in canvas px. Default 18. Lower keeps more of the source curve; higher is looser.
stylestring–sketch (default): hand-drawn treatment - anchors re-spaced, curves as curves, roughness 1, native circles/rects. precise: every flattened vertex kept, roughness 0 - for a logo or a drawing that must…
svgstringyesComplete SVG markup, including the <svg> element and its viewBox.
tolerancenumber–Curve flattening, in source units. Default 3. Lower is smoother and heavier.
widthnumber–Scale the artwork to this width, keeping its aspect ratio. Height follows.
xnumber–Where to place it on the canvas. Default 0.
ynumber–Default 0.

No output schema declared.

No examples provided.

list_history ~45

Snapshots held for a scene, newest first.

NameTypeReqDescription
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

list_scenes ~31

Every scene in the vault with its id, name, element count and last-edited time. Start here.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

move_elements ~222

Shift a set of elements by dx, dy in one write, keeping everything else about them. Select by ids, groupIds (an import_svg piece), a region box, or any mix. A container's label always moves with it, and an arrow bound to something that moves keeps that end attached (include the arrow itself to move it whole). Returns the new bounds of what moved.

NameTypeReqDescription
dxnumber–Scene px to the right (negative = left).
dynumber–Scene px down (negative = up).
groupIdsarray––
idsarray––
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
regionobject–Everything overlapping this box moves.
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

read_elements ~116

Full, unabridged elements, filtered down to the ones you need. Use this rather than read_scene when editing a few things in a busy scene.

NameTypeReqDescription
containsstring–Only elements whose text contains this.
idsarray––
limitnumber–Default 100.
regionobject–Only elements overlapping this box.
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.
typestring––

No output schema declared.

No examples provided.

read_scene ~123

The whole scene exactly as stored, plus the path to the .excalidraw file on disk. Large scenes run to thousands of elements, so prefer describe_scene or read_elements unless you genuinely need everything. The path is there for edits no tool here covers - take a snapshot first if you use it.

NameTypeReqDescription
includeFilesboolean–Include the embedded image map. Off by default: it is base64 and usually megabytes.
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

render_scene ~346

A PNG of the scene as it actually renders, so you can look at what you drew. Use it to check your own work - proportions, overlaps, whether the thing reads as the thing. Always written to a file as well as returned. A tall or wide page (long edge more than about twice the short one, and too big to fit at the asked size) comes back as a few tiles cut along its length, each with the scene box it shows, so a whole board is readable in one call; a `region` renders just that box, which is the way to look closely at one part. When an image is too big to travel inline you get a downscaled preview plus the file path.

NameTypeReqDescription
idsarray–Render only these elements.
maxWidthnumber–Cap the long edge in pixels. Default 1400. Above ~1200 the result is a file path instead of an inline image.
regionobject–Render only what overlaps this box, in scene coordinates. Take the numbers from describe_scene's `bounds`.
scalenumber–Pixel density, 1-3. Default 1.
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.
tilesnumber–Split the picture into this many tiles along its long axis (max 8). Default: chosen from the shape of the scene, 1 for anything roughly square. Pass 1 to force a single image.
transparentboolean–Leave the paper out of the PNG (alpha background). For dropping a sketch onto a slide or a page.

No output schema declared.

No examples provided.

replace_scene ~859

Replace a scene's entire contents. Destructive by design - the previous state is snapshotted, but prefer add_elements or update_elements when you only mean to change part of it.

NameTypeReqDescription
elementsarrayyesExcalidraw elements. Any field of a real element is honoured verbatim; what you omit gets a valid default (id, index, seed, version are generated). USE THIS FOR diagrams, layout, text, boxes, arrows…
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

restore_snapshot ~64

Put a snapshot back on the canvas. This is itself snapshotted, so reverting a revert is possible.

NameTypeReqDescription
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.
snapshotstringyes–

No output schema declared.

No examples provided.

set_background ~166

Set the paper: the scene's real background colour, shown exactly as given (never inverted). The default pen for hand drawing follows it, so the next stroke in the app is visible. Elements already drawn keep their colours - recolour their ink yourself if you flip a scene from light to dark or back. New scenes start on dark paper (#121212).

NameTypeReqDescription
colorstringyes–
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

sketchdex_docs ~106

The manual, for answering the user's questions and fixing problems without guessing: install on any client, where scenes are stored and how to move the vault, the library app, what rendering needs, every tool, the drawing contract, and troubleshooting for the errors that come up. No topic returns the index.

NameTypeReqDescription
topicstring–One of: install, vault, app, rendering, tools, drawing, troubleshooting. Omit for the index; `all` for the whole manual.

No output schema declared.

No examples provided.

sketchdex_info ~50

Version of this server, where it is running from, which vault it is using, and how long this process has been alive. Use it to confirm you are talking to the build you think you are.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

snapshot_scene ~133

Stash the current state without changing anything, so it can be restored from the history sidebar. Do this before editing a .excalidraw file directly with your own file tools - every other tool here snapshots on its own.

NameTypeReqDescription
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

update_elements ~183

Change named fields on existing elements. Send only what changes - {id, x: 40} moves one box and leaves its other 25 fields alone. Pass a list in `elements`, each carrying its `id`, or use `ids` + `patch` to apply one change across many.

NameTypeReqDescription
elementsarray–Partial elements, each with an `id` and the fields to change.
idsarray––
labelstringyesShort description of what this change is doing, e.g. 'add the dog illustration'. Shown next to the snapshot in the history sidebar, which is how the user decides whether to keep or revert it. Always…
patchobject––
scenestringyesScene id, exact name, or a unique part of the name. Use list_scenes if unsure.

No output schema declared.

No examples provided.

Common questions

What is the Sketchdex MCP server?

Sketchdex is an MCP server listed in the public MCP registry as io.github.lucasr1b/sketchdex. An MCP server that lets AI agents draw hand-drawn Excalidraw diagrams as files on your machine. This page covers its npm package (sketchdex).

Is the Sketchdex MCP server safe to use?

Sketchdex scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. 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 Sketchdex MCP server expose?

Sketchdex exposes 19 tools: list_scenes, describe_scene, read_elements, read_scene, create_scene, and 14 more. Their descriptions and schemas cost roughly 5,283 tokens of context every time the server is loaded.

Is the Sketchdex MCP server still maintained?

Sketchdex is still listed as active in the MCP registry. We last reached this channel on 25 September 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 Sketchdex MCP server under?

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