Skip to main content
Glama

PLMHub boards

Server Details

Draw diagrams, build HTML pages and write Markdown in a live editor the user sees.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

The tools have clearly distinct roles: open_board creates a board, read_board reads it, write_board replaces HTML/Markdown content, edit_text makes partial text-board edits, and draw handles doodle boards. The descriptions explicitly separate doodle operations from text-board operations, leaving little room for misselection.

Naming Consistency4/5

Four tools follow a clear verb_noun pattern (open_board, read_board, write_board, edit_text), which is consistent and readable. The lone exception is draw, which is a standalone verb and does not follow the noun-suffix pattern.

Tool Count5/5

Five tools is well-scoped for a board server with two board types. Each tool has a distinct role, and the large doodle operation surface is sensibly consolidated into the single draw tool rather than split into many tools.

Completeness3/5

The surface covers creation, reading, full replacement, partial editing, and doodle manipulation well. However, there is no visible operation for deleting, closing, listing, or renaming boards, leaving notable lifecycle gaps.

Available Tools

5 tools
drawDraw on a doodle boardAInspect

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

fill, stroke, backgroundColor (CSS colors) · strokeWidth · opacity 0..1 · angle (degrees) · radius (corner radius; or rx, ry) · borderStyle "solid" | "dashed" | "dotted" | "dashdot" or strokeDashArray [numbers] · shadow "none" | "soft" | "medium" | "hard", {color, blur, offsetX, offsetY} or null · gradient {"type": "linear" | "radial", "stops": [{"offset": 0, "color": "#6366f1"}, {"offset": 1, "color": "#ec4899"}], "coords"?: 0..1 units} (replaces fill) · flipX, flipY, skewX, skewY · text, fontSize, fontFamily, fontWeight, fontStyle ("italic"), textAlign, underline, linethrough, lineHeight, charSpacing, padding · name (layer name), visible, locked (true/false).

Structure

  • {"op": "group", "ids": [2 or more], "name"?, "groupId"?} returns the group id. {"op": "ungroup", "group": groupId} or {"op": "ungroup", "ids": [...]}.

  • {"op": "wrap", "ids": [...], "direction"?, "justify"?, "align"?, "gap"?, "padding"?, "frameId"?} puts the elements in a new auto-layout frame and returns its id. {"op": "unwrap", "id": frameId} removes the frame and keeps its children.

  • {"op": "reparent", "ids": [...], "frame": frameId} moves elements into a frame; "frame": null takes them out.

  • {"op": "layout", "id": frameId, "mode"?: "block" | "flex", "direction"?: "row" | "col", "justify"?: "start" | "center" | "end" | "between", "align"?: "start" | "center" | "end" | "stretch", "gap"? = 16, "padding"? = 16, "wMode"?, "hMode"?: "hug" | "fixed", "w"?, "h"?} A flex frame lines its children up (row = left to right, col = top to bottom) and hugs them, or keeps the fixed w/h. A block frame leaves children where they are.

  • {"op": "size", "id", "w"?, "h"?: "fixed" | "hug" | "fill", "minW"?, "maxW"?, "minH"?, "maxH"?} how a child of a flex frame sizes; fill shares the frame's spare room; null clears a min/max.

Board

  • {"op": "bg", "color": "#f8fafc"} or {"op": "bg", "src": imageUrl} (an image behind everything).

  • {"op": "board", "w"?, "h"?, "autoH"?: true, "padding"?, "minH"?, "maxH"?} autoH grows the board to fit its content plus padding, within minH..maxH.

Errors name the failing op (ops[2] (move): ...): 400 for a bad field, 404 for an unknown id, 409 for an id already in use. Fix that op and send the batch again.

ParametersJSON Schema
NameRequiredDescriptionDefault
opsYesThe ops, in order
boardYesThe board's 22-character code, or its URL

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so thoroughly: ops apply in order atomically, the response lists created ids, elements are addressed by id, positioning semantics are defined, and errors include failing op indices with HTTP statuses. It also discloses that the user sees each call appear live in the editor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the complexity of the ops language justifies the length. It is front-loaded with purpose and live-visibility context and then organized into clear sections for create, change, style, structure, board, and errors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity batch-drawing tool with no output schema and no annotations, the description covers the critical operational details an agent needs: atomicity, id addressing, positioning defaults, op syntax, style fields, structural operations, and error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema coverage is 100%, the schema only defines board and an opaque ops array. The description adds extensive meaning for ops: op types, required fields, defaults, style fields, group/frame semantics, layout behavior, and error handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: draw on a doodle board by sending ops. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools such as write_board or edit_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the detailed ops model and the note that calls appear live in the editor. However, the description never states when to choose draw over write_board, edit_text, or read_board, nor does it provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_textEdit an HTML or Markdown boardAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
opsYes
boardYesThe board's 22-character code, or its URL

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose two critical behaviors: operations are applied in order with all-or-nothing semantics (atomicity), and 'replace' requires 'find' to occur exactly once (a key failure mode). It omits failure/response behavior and any size or count limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One framing sentence followed by a scannable bullet list of ops, with the most consequential constraint (in-order, all-or-nothing) front-loaded. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the essentials an agent needs to call it correctly: op types, ordering, atomicity, and the uniqueness precondition on 'find'. It could go further on error behavior and the 200-op/256k-character limits, but nothing required is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, so the description must compensate for the array parameter, and it does: it explains each op's semantics beyond the bare 'const' values (write replaces everything, append adds, replace needs a unique match). The 'board' parameter is already documented in the schema, so the description reasonably doesn't repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Change part of an HTML or Markdown board') plus a distinguishing benefit ('without resending all of it') that implicitly separates it from write_board. It never names write_board or read_board explicitly, so sibling differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'without resending all of it' framing hints that this is preferred over a full rewrite, and the op list shows which operation to pick for a given edit intent. But there is no explicit when-to-use/when-not guidance and no named alternative tool for whole-board replacement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_boardOpen a new boardAInspect

Open a new, empty board and get its link. Give the link to the user: they watch your work there and download it.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesdoodle, html or markdown

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does disclose the key behavior that a persistent, shareable resource is created and that the returned link is meant for the user to observe and download. It does not say whether calling twice creates two separate boards, how long the board lives, or whether any auth/ownership applies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and then the follow-up contract. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter creation tool with no output schema, it covers what is created, what comes back (a link), and what the agent should do with it. The remaining gap is lifecycle behavior — repeated calls and whether one board per session is expected — but nothing critical to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 100% with an enum of doodle/html/markdown, so the schema already fully specifies it. The description never mentions the 'kind' choice or what each board type implies, adding no meaning beyond the schema — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Open a new, empty board') plus the side effect of returning a link, which is enough to distinguish it from the read/write/edit siblings. It does not explicitly name those siblings, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the workflow instruction ('Give the link to the user: they watch your work there'), which tells the agent what to do after the call. However, there is no guidance on when to choose open_board versus going straight to write_board or draw on an existing board, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_boardRead a boardA
Read-only
Inspect

Read a board: its kind and current content (the Markdown or HTML text, or the doodle's elements with their ids, roles, boxes and styles).

ParametersJSON Schema
NameRequiredDescriptionDefault
boardYesThe board's 22-character code, or its URL

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safety profile, so the description's job is to add context — and it does, by disclosing the shape of the returned content per board kind, which matters since there is no output schema. It omits error behavior for an invalid board code and any truncation/size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence that leads with the verb and resource, with the return-shape detail packed into a parenthetical. The parenthetical is dense but every clause carries information; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with annotations and no output schema, the description covers the main unknown — what the response contains for each board kind — which is exactly what the missing output schema would have provided. Only failure modes for bad board identifiers are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'board' parameter is fully documented in the schema (100% coverage) including that it accepts a 22-character code or a URL. The description adds nothing about the parameter, so the schema does all the work and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (board), and enumerates what content comes back: Markdown/HTML text or doodle elements with ids, roles, boxes and styles. It does not differentiate itself from the sibling open_board, which an agent could easily confuse with reading a board's content, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus open_board, draw, edit_text or write_board, and no prerequisites or exclusions. Usage is only inferred from the verb 'read' and the word 'current content'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_boardReplace a board's contentAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
boardYesThe board's 22-character code, or its URL
contentYesThe new content

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It usefully discloses that the tool replaces everything on the board and specifies acceptable content formats, but it omits other mutation-related details such as permissions, reversibility, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences front-load the destructive replacement behavior, then add format constraints and an alternative. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema or annotations, the description provides the essential purpose, destructive behavior, content formats, and an alternative. It could still say more about permissions or failure modes, but it is nearly complete for this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds format-specific meaning for the content parameter: HTML must be a complete inline document and Markdown is GitHub-flavored. This goes beyond the generic schema description 'The new content.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Replace' with the resource 'board' and explicitly states that all existing content is overwritten. It also distinguishes the HTML/Markdown formats and names a sibling tool for a different use case, so an agent can quickly identify its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context and an explicit alternative for doodling: 'For a doodle, use `draw` instead.' However, it does not contrast with other relevant siblings such as `edit_text`, so the guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observeddraw
    • First observededit_text
    • First observedopen_board
    • First observedread_board
    • First observedwrite_board

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources