Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SKETCHDEX_VAULTNoPath 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_BROWSERNoPath 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

CapabilityDetails
tools
{
  "listChanged": true
}
resources
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 elements, each carrying its id, or use ids + patch to apply one change across many.

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

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:

  • 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, /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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
installInstall on Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI or any MCP client, and check it works.
vaultWhere scenes are stored, how to move the folder, history and trash.
appOpening the app (npx sketchdex app), the library, the editor, the history sidebar, scene links, and the HTTP and REST surfaces it serves.
renderingWhat render_scene needs, how it finds a browser, sizes, tiles, regions and transparency.
toolsEvery tool with what it is for.
drawingThe drawing manual: element format, the hand-drawn contract, paper and ink, shorthand, the history safety contract.
troubleshootingTools not showing up, npx on Windows, no browser found, slow renders, broken installs, refused writes.

TDQS

A3.6/5.0

Scored across 19 tools

Disambiguation4/5

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

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues