sketchdex
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SKETCHDEX_VAULT | No | Path to the folder where scenes are saved. Defaults to ~/Documents/sketchdex. Can also be set with --vault /path/to/folder after the package name. | |
| SKETCHDEX_BROWSER | No | Path to a Chromium-based browser if it is somewhere unusual. Required only for rendering (render_scene). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_scenesA | Every scene in the vault with its id, name, element count and last-edited time. Start here. |
| describe_sceneA | 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. |
| read_elementsA | 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. |
| read_sceneA | 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. |
| create_sceneB | Make a new scene, optionally with its starting elements. |
| add_elementsA | Append elements to a scene, leaving everything already there untouched. The usual way to draw something new. |
| update_elementsA | 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 |
| delete_elementsC | Remove elements by id. |
| move_elementsA | 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. |
| replace_sceneA | 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. |
| set_backgroundA | 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). |
| render_sceneA | 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 |
| import_svgA | 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, // 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:
Supported: path (all commands), rect, circle, ellipse, line, polyline, polygon, g, transform, /class, /, presentation attributes, text. viewBox honoured exactly. Gradients flatten to their first stop; pass holeColor to punch compound-path holes. |
| check_sceneA | 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. |
| sketchdex_infoA | 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. |
| sketchdex_docsA | 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. |
| snapshot_sceneA | 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. |
| list_historyB | Snapshots held for a scene, newest first. |
| restore_snapshotB | Put a snapshot back on the canvas. This is itself snapshotted, so reverting a revert is possible. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| install | Install on Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI or any MCP client, and check it works. |
| vault | Where scenes are stored, how to move the folder, history and trash. |
| app | Opening the app (npx sketchdex app), the library, the editor, the history sidebar, scene links, and the HTTP and REST surfaces it serves. |
| rendering | What render_scene needs, how it finds a browser, sizes, tiles, regions and transparency. |
| tools | Every tool with what it is for. |
| drawing | The drawing manual: element format, the hand-drawn contract, paper and ink, shorthand, the history safety contract. |
| troubleshooting | Tools not showing up, npx on Windows, no browser found, slow renders, broken installs, refused writes. |
TDQS
Scored across 19 tools
Most tools target clear and distinct operations (add vs update vs delete vs move vs replace elements). There is some overlap in the reading surface (describe_scene, read_elements, read_scene) and between move_elements and update_elements, but the descriptions explicitly clarify when to use each (cheaper summary vs filtered vs full; move adds group/region selection).
Nearly all tools follow a clean snake_case verb_noun pattern (list_scenes, create_scene, add_elements, restore_snapshot). The only deviations are the namespace-style sketchdex_info and sketchdex_docs, which is a mild but coherent exception for meta tools.
19 tools is on the heavier side but justified for a full drawing/editing domain covering scenes, elements, SVG import, rendering, layout checking, background, docs and history. Each tool occupies a distinct role, though it sits near the upper bound of comfortable scoping.
The surface is broad: scene and element CRUD, SVG import, geometric validation, rendering, background control, snapshots and history restoration. Minor gaps exist (no delete_scene or group/ungroup tool), but agents can work around these with replace_scene and groupIds.