PLMHub boards
eu.plmhub/boardsVersion 1.0.0Draw diagrams, build HTML pages and write Markdown in a live editor the user sees.
Status
Responds269 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:30 UTC
- Latency
- 269 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://plmhub.eu/mcpResponds269 msNo sign-in
Claude Code
claude mcp add --transport http boards https://plmhub.eu/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: boards
Remote MCP server URL: https://plmhub.eu/mcpCursor
{
"mcpServers": {
"boards": {
"url": "https://plmhub.eu/mcp"
}
}
}VS Code
code --add-mcp '{"name":"boards","type":"http","url":"https://plmhub.eu/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
5 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
drawDraw on a doodle board. The user sees each call appear live in the editor.
## Doodle ops
A doodle is a board (default 1280 x 720 px, origin top-left, y grows down). Send ops as
`{"ops": [...]}`; they apply in order, all or nothing. The answer lists the ids each op
created, in order. Address elements by id; read the board for the ids it already has.
**Positions:** x, y is the CENTER of a shape or text, the top-left of a comment, the
midpoint of a line. Omit them to place at the board's center. Later elements draw on top.
### Create
- `{"op": "add", "role": "text" | "box" | "button" | "input" | "card" | "ellipse" | "line" | "image" | "comment" | "draw" | "triangle" | "diamond" | "star" | "frame", "x", "y", "w"?, "h"?, "id"?, ...style}`
Defaults (w x h): text 160 wide, box 180x110, card 240x150 (radius 12), button 150x46,
input 220x44, ellipse 140x90, line 180 long, triangle 120x110, diamond/star 120x120,
image 320x200 (needs "src": URL or data: URL), frame 360x240, draw needs "path".
Pass your own "id" to address the element without reading back (it must be unused).
Buttons and inputs are plain shapes: give them text with `label`.
- `{"op": "draw", "path": "M 10 10 L 90 90", "stroke"?, "strokeWidth"?}` freehand; path
coordinates are board coordinates.
- `{"op": "comment", "text", "x"?, "y"?, "w"?}` a sticky note for the human.
- `{"op": "label", "id": shapeId, "text", "fontSize"? = 16, "fill"?, "labelId"?}` text
centered inside a shape that follows it when the shape moves. Empty text removes it.
- `{"op": "duplicate", "id", "newId"?, "dx"? = 20, "dy"? = 20}`
### Change
- `{"op": "update", "id", ...style}` (fields below; "x"/"y"/"w"/"h" set position and size)
- `{"op": "move", "id", "dx", "dy"}` or `{"op": "move", "id", "x", "y"}`; moving a
frame moves its children too.
- `{"op": "reorder", "id", "to": "front" | "back" | "forward" | "backward"}`
- `{"op": "delete", "id"}` · `{"op": "clear"}` removes everything.
### Style fields (add and update)
fil | Not declared | Not declared | Not declared | Not declared |
edit_textChange part of an HTML or Markdown board without resending all of it.
Ops (applied in order, all or nothing):
- {"op": "write", "text": "..."} (replace everything)
- {"op": "append", "text": "..."}
- {"op": "replace", "find": "...", "replace": "..."} (find must occur exactly once) | Not declared | Not declared | Not declared | Not declared |
open_boardOpen a new, empty board and get its link. Give the link to the user: they watch your work there and download it. | Not declared | Not declared | Not declared | Not declared |
read_boardRead a board: its kind and current content (the Markdown or HTML text, or the doodle's elements with their ids, roles, boxes and styles). | Not declared | Yes | Not declared | Not declared |
write_boardReplace everything on an HTML or Markdown board. HTML: one complete document with inline CSS and JS. Markdown: GitHub-flavored. For a doodle, use `draw` instead. | Not declared | Not declared | Not declared | Not declared |
Details
- Registry status
- Active
- Published
- Oct 23, 2026
- Updated
- Oct 23, 2026
- Repository
- Not given
- Categories
- Uncategorized
- GDPR
- Not declared