MCP App Store
by KeenEthics

Overview

Lekh is a collaborative diagramming and whiteboarding app. Connect it to ChatGPT to draw diagrams from a description — flowcharts, sequence diagrams, network and cloud architecture diagrams, mind maps, ER diagrams, org charts and more — using Lekh's catalogue of over 4,600 shapes, including AWS, Azure and Google Cloud icons. ChatGPT can also read, render and explain your existing boards, edit them (including while a colleague has the board open), organise boards into folders, and share them. Who it is for: anyone with a Lekh account who wants a diagram drawn or changed by asking for it. Limitations: you need a Lekh account; boards larger than 1 MB or 50 pages cannot be opened by the connector; renders use a standard font rather than the board's own; the connector does not see edits made by others until it reads the board again.

Tools

board_add_image

ChatGPT
Add a picture to a Lekh board: upload an image and place it, in one call. Use it whenever the person gives you an image to add. Supply cx and cy to say where, or omit them and it is placed clear of the existing content. width and height are required: they are the size of the OBJECT on the board, in points, which is independent of the picture's own pixel size — a 500×500 photograph drawn as a 50×50 object is a normal thing to want, and only you know which. Like any other edit, it takes the version you read and is refused with board_version_conflict if the board has moved on. The res:// it returns places the SAME picture again on THIS board — an add_node with image: {res} and its own width/height, no re-upload — and is refused on any other board, which has to have its own upload. Then call board_render with a region around it and look at the image: the size and place are only right once you have seen them.

board_create_content

ChatGPT
Create a whole Lekh diagram in one call: pages, shapes, connectors and text. Its format — coordinates, schema and fields — is the semantic-board-format guide (tool guide_read); how to build a whole board is in the editing-boards guide (tool guide_read). Shapes are named by template id — find them with stencil_search. A floating label is avabodh.basic.text and a picture is avabodh.basic.image; neither is in the searchable catalogue, so use those two ids directly. Render it first with board_render and its content argument: this call creates something the person will see, and fixing it afterwards means either editing or deleting. Pass docid to fill an existing empty board, or name and parent to create one. If someone has the board open, they see the diagram appear as soon as it is written. A shape no stencil draws can be a lekh.semantic.path node with its own draw, width and height — search stencil_search first, and create one only when no stencil fits; free-hand drawings cannot be created. Before you draw, read the diagram-types guide (tool guide_read) for your kind of diagram. Lay it out cleanly and use colour only when it carries meaning or the person asks — see the visual-design guide (tool guide_read). Before you say it is done, call board_render and check: nothing overlaps, no shape is hidden behind another, text sits inside its shape, connector labels are shorter than their connector, and gaps are even; fix what the image shows.

board_edit

ChatGPT
Edit a Lekh board: add, move, retitle, restyle, connect or delete, in one batch. A new shape is named by its template id from stencil_search; the server draws it. A shape with its own drawing is add_node with shape: "lekh.semantic.path", a draw, width and height, and only when no stencil fits the shape you want — a drawing cannot be edited afterwards, only deleted and re-added, and free-hand drawings are not nodes you can address. version is required and must be the one board_read returned; someone may have the board open, your changes appear on their screen immediately, and a stale edit is conditioned on just the fields it changes (conflict_policy: "strict" refuses any stale version with board_version_conflict) rather than overwriting them. On a conflict, read again and rebuild — never resend unchanged. Put related operations in one call. The operations are in the editing-boards guide (tool guide_read); preview with board_preview_edit first. Match the board's existing look and change nothing visual you were not asked to — see the visual-design guide (tool guide_read). Before you say it is done, call board_render on what you changed and check: nothing overlaps, no shape is hidden behind another, text sits inside its shape, connector labels are shorter than their connector, and gaps are even; fix what the image shows.

board_outline

ChatGPT
Outline a Lekh board: its pages, their bounds, counts and size, not its objects. Per page: id, name, order, canvas_type, bounds, how many nodes, edges and free-hand strokes it has, and projected_bytes, what reading it with board_read carries — divide by 150,000 (or your max_bytes) for the number of responses. Use it to choose a page or region before reading a large board. board_read embeds the same outline in every response.

board_preview_edit

ChatGPT
Preview what an edit would do to a Lekh board, without changing it. Takes exactly what board_edit takes and returns the rendered result; nothing is written and nobody sees anything. Use it between building a batch and sending it, especially on a board someone else may have open. It takes board_edit's arguments, conflict_policy included: by default a stale version is previewed against the current board with a note, exactly as the edit would apply; strict refuses it with board_version_conflict. Pass region or node (with padding) to see part of the page, as board_render does. Look at the image: check that anything you added matches its neighbours, overlaps nothing, and neither hides nor is hidden behind another shape. The picture uses this server's font family; size, colour and positions are the board's. Fix text that clearly spills out of its shape; ignore a line that is only slightly tight.

board_read

ChatGPT
Read a Lekh board as pages of nodes and edges, with text, styles and shape ids. Positions are in points. Call this before any edit — the version it returns is required by board_edit, and the object ids are how you address anything. Every page comes back by default, in parts: each response carries at most 150,000 bytes of JSON (or your max_bytes) and an outline of the whole board. If next_token is not null, objects are still to come: call again with it, and follow it until it is null before you summarise the board as if it were whole. If the board changes mid-read, the next part is refused with board_version_conflict unless you pass if_changed: "continue". Narrow a large board with page, region or include_style: false; board_outline gives the outline alone. This is a projection of the board's content — its nodes, edges and text as data — not a picture of it. Free-hand drawings are not in it: they are left out of nodes (each page's freehand counts them and notes says so), and a shape with its own drawing reads as lekh.semantic.path with a draw. To see how the board actually looks — free-hand drawings included, with generated shapes, colours and layout — call board_render. It is the only representation of board content this server offers; there is no raw file format. How to read it — coordinates above all — is the semantic-board-format guide (tool guide_read), which leads to every field's meaning; for what drives a shape marked generated, call stencil_get.

board_render

ChatGPT
Render a Lekh board, one shape on it, or content not yet saved, as a PNG. Three ways to use it, and the third is the one worth remembering: pass docid to see a stored board; add node to see one shape from it, which is the only way to see a shape marked generated; or pass content — a board in the same schema board_create_content takes — to render something that does not exist yet, with nothing stored anywhere. Use content to check a diagram before you create it, and to check a single shape's text before you place it. Pass docid or content, never both, and region or node, not both; either crops page, or the first page. To preview a change to an existing board, use board_preview_edit instead — rendering an edited projection is not the same picture. Look at the image to judge the layout — overlaps, text outside its shape, crowded connector labels, uneven gaps, and shapes hidden behind another (a container drawn in front of what it holds: reorder it to back, or give it a lower z_order). The image is the check: nothing else in the answer says the layout is right. What to look for is in the visual-design guide (tool guide_read). If a picture on the board could not be drawn — unreadable bytes, too large to decode, or refused by the store — it is left out and notes names its res:// and why; an omitted picture looks like an empty shape, so check notes before you call one empty. One thing in this image differs from the board: the font family. This server draws every label in one built-in font; the text size, bold, italic, alignment, colours and every position are the board's own. The built-in font runs a little wider than the fonts boards use, so text that fits here fits on the board. If text clearly spills out of its shape, or a label runs past its connector, fix it: break it with \n, shorten it, or widen the shape (every shape of that role). Do not act on a line that is only slightly tight, and do not describe the board's typography from this image.

docs_create_board

ChatGPT
Create a new Lekh board, empty or from a library template. Use this when the person wants a new diagram and you will add content afterwards with board_edit. If you are building a whole diagram in one go, board_create_content does both — and render it with board_render before you commit, so you do not leave an abandoned board behind.

docs_create_folder

ChatGPT
Create a folder on the user's Lekh dashboard. The name must not be empty and must not contain / — Lekh folders nest by parent, not by path.

docs_delete_item

ChatGPT
Permanently delete a Lekh board or folder. A folder must be empty first. This cannot be undone and the person will lose the work — confirm with them before calling it, every time, and never as a step inside a larger task they did not ask for.

docs_duplicate_board

ChatGPT
Copy a Lekh board, with its content, to a new board. Useful before a risky change, or when the person wants a variant. The copy counts against their board quota.

docs_get_item

ChatGPT
Get one Lekh board's or folder's metadata, and the chain of folders it sits in. Use it to confirm you have the right board before editing, or to tell the person where something lives. For a board's contents use board_read instead.

docs_list_items

ChatGPT
Find Lekh boards and folders: by folder, recent, starred, shared, or search. Use this first when the person names a board rather than giving you its id, or asks what they have. view picks what to list: folder for one folder's contents, recent, starred, shared, or search to match a query across their own boards. Note two limits: recent and starred return a single page and have no more to fetch, and search covers only the user's personal documents — a board inside a workspace will not appear, so an empty result does not prove it does not exist. To page, pass the returned next_token back with the identical query; changing anything means starting over. Paging, sharing and workspaces are in the dashboard guide (tool guide_read).

docs_list_shares

ChatGPT
List who has access to a Lekh board, and at what level. Check this before sharing, so you can tell the person what would change.

docs_move_item

ChatGPT
Move a Lekh board into a folder, or to the root by omitting parent. Folders cannot be moved — that is a product limitation, not an argument you can work around, and attempting it returns cannot_move_folder. To reorganise folders, tell the person what is not possible.

docs_rename_item

ChatGPT
Rename a Lekh board or folder. This is the item's name in the dashboard, not any title drawn on the board itself — to change text on the canvas, use board_edit.

docs_revoke_share

ChatGPT
Unshare a Lekh board or folder: remove someone's access, or its public link. The person loses access immediately; say who you removed.

docs_share_item

ChatGPT
Share a Lekh board or folder with someone, at read, write or comment. Only the owner can share, and public link sharing works on boards but not folders. This gives a real person standing access to someone's work — confirm who and at what level before calling it, and say what you did afterwards.

docs_star_item

ChatGPT
Star a Lekh board: add it to the person's starred list. Starred items are their own view in docs_list_items.

docs_unstar_item

ChatGPT
Unstar a Lekh board: remove it from the person's starred list. Starred items are their own view in docs_list_items.

guide_read

ChatGPT
How to draw in Lekh: guides per diagram type, layout, format and errors. getting-started is the map — the five tool families, the rules that hold everywhere, and which guide to read when; start there. semantic-board-format is what board_read returns and the coordinate conventions, with semantic-board-fields for every field and semantic-board-schema for the JSON Schema; editing-boards is the operation set and the version rule; visual-design is how to lay out and style a diagram; stencils is how the catalogue works; dashboard covers files, folders and sharing; limits-and-errors says what fits in one read and what each error means. diagram-types routes each kind of diagram — flowchart, UML, ER, BPMN, cloud, … — to its own guide; read it before drawing. Each guide is also an MCP resource, lekh://guide/<name>.

library_get_item

ChatGPT
Get metadata for one saved Lekh shape or template. To put a saved template to use, create a board from it with docs_create_board and from_template.

library_list_items

ChatGPT
List saved Lekh shapes and templates: the person's own, system or public. Use it when they refer to something of theirs — "my org chart template". For the built-in catalogue use stencil_search. A shape saved moments ago may not appear here yet. Give kind to page: with it omitted, shapes and templates are listed together and there is no continuation to follow.

stencil_get

ChatGPT
Get what one Lekh shape template takes: its parameters, text slots and syntax. Call this whenever a node is marked generated: true, or before setting a shape's parameters or text: it returns the template's parameters with their types, defaults and allowed values, its text slots with the template's own default text for each — which is how you know which slot is the heading and which is the button — and, for a shape that parses its text, the syntax with a worked example. A shape whose stencil declares a title (a caption drawn outside the shape, on one side — the AWS icons have one below) reports it as title {default_text, side, style?}, NOT among texts: set it with add_node's title or the set_title op, never with set_text. It also answers for a connector arrowhead, which is addressed BY NAME — solid_triangle, not a dotted id — in arrow: {start, end}, and comes from a different catalogue than the Arrow category of standalone arrow shapes; pass a name or an id here, because stencil_search cannot find an arrowhead at all. Read notes: a shape whose text is addressed by cell declares no slots, and says so there. Then render it with board_render and content to check you understood.

stencil_list_categories

ChatGPT
List the Lekh shape catalogue's categories and the groups they sit in. They are Flowchart, UML, UI Wireframe, BPMN, the cloud-vendor sets and the rest. Use it to narrow a search that found nothing, or to tell the person what kinds of diagram Lekh can draw.

board_add_image

Claude

board_create_content

Claude

board_edit

Claude

board_outline

Claude

board_preview_edit

Claude

board_read

Claude

board_render

Claude

docs_create_board

Claude

docs_create_folder

Claude

docs_delete_item

Claude

docs_duplicate_board

Claude

docs_get_item

Claude

docs_list_items

Claude

docs_list_shares

Claude

docs_move_item

Claude

docs_rename_item

Claude

docs_revoke_share

Claude

docs_share_item

Claude

docs_star_item

Claude

docs_unstar_item

Claude

guide_read

Claude

library_get_item

Claude

library_list_items

Claude

stencil_get

Claude

stencil_list_categories

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

52

Tools

3

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily