Skip to main content
Glama

Maket

Create visual documents with your AI assistant. Maket gives Claude, Codex, Gemini, and other MCP clients an HTML/CSS canvas with live preview. Compose a one-off design, bind a template to typed rows for mail merge, or attach validated document-owned state so native HTML controls and agent updates keep a living document current. Export finished output to PDF or hand it off to Gmail as a draft.

npm version npm downloads License: MIT Node MCP ng-galien/maket MCP server CI Coverage PRs welcome

Visit the Maket website →


Install Maket App

Maket App is the default way to run Maket. It includes the interface, server, runtime, and agent setup — Node.js is not required.

Platform

Installer

macOS Apple Silicon

Maket-macOS-arm64.dmg

macOS Intel

Maket-macOS-x64.dmg

Windows x64

Maket-Windows-x64-Setup.exe

Linux x64

Maket-Linux-x64.deb or Maket-Linux-x64.rpm

Download the newest snapshot to test Maket App now. Snapshot installers are unsigned, built from main, and retained for 14 days. Signed macOS and Windows installers, plus Linux packages, will appear on the latest release once the desktop release is published.

Open the installer, launch Maket, then follow the first-run agent setup.

Need a headless server, CI installation, or browser-only deployment? Jump to Maket Server via npm.

Related MCP server: AI-Canvas MCP Server

Why Maket

Your AI assistant is good at writing. But design is about space, hierarchy, and rhythm — and that happens in layout, not prose. Maket adds a real canvas, reusable visual resources, and two distinct data models: collections produce repeated variants from ordered rows, while document state keeps one document synchronized with its own validated, revisioned data.

Features

  • Live preview — Changes appear in your browser the instant the AI writes them. Click any element to annotate it and send feedback back to the chat.

  • HTML/CSS canvas — Pages are real HTML sized in mm. No lock-in to a proprietary format.

  • Brand chartes — Define design tokens (colors, fonts, spacing, shadows) once; Maket enforces them during composition.

  • Image library — Drop images in, tag them, the AI picks the right one for the brief.

  • Data-driven collections — Define typed fields with JSON Schema, paste or edit ordered rows, bind a page to placeholders such as {{ product_name }}, preview one row or the full series, and render one output page per row.

  • Living documents — Attach a JSON Schema and state snapshot to one document, render {{ state.* }} values, edit supported fields through bound checkbox, text, select, and button controls, and retain immutable revisions for history and restore.

  • PDF export — Print-ready output via headless Chromium.

  • Gmail drafts — Compose an email document and hand it off to Gmail as a draft; you review and send yourself.

  • Paper & screen formats — A2–A8, plus DESKTOP/TABLET/MOBILE aspect ratios for digital mockups.

  • Agent skills included — Three skills (maket, maket-charte, maket-review) that teach the AI assistant how to design, brand, and review documents.

What it looks like

You    — fais-moi un flyer A5 pour un concert jazz dimanche soir, ambiance feutrée

AI     — maket_doc new doc="Jazz flyer" format=A5 orientation=portrait
         maket_charte view name="Smoky Club"
         maket_html set doc="Jazz flyer" page=1 context_token=...
         → Live preview opens. Warm amber on deep navy, serif display for
           the headline, fine sans for the venue details.

You    — (clicks the date on the preview) "rends-la plus grosse"

AI     — maket_workspace list_messages → sees your note
         maket_html patch doc="Jazz flyer" ops=[...]
         → Date scales up, hierarchy re-balanced.

You    — parfait, exporte

AI     — maket_pdf doc="Jazz flyer"
         → ~/.maket/exports/jazz-flyer.pdf

Data-driven documents

Collections turn a page into a reusable template for product labels, event badges, personalized flyers, certificates, catalog pages, or any other repeated document. Each collection owns a JSON Schema and a set of ordered rows. Bind it to a page, place typed values in the HTML with {{ field_name }}, and Maket renders one variant per row.

The Collections workspace and maket_collection tool both support schema changes, row insertion/update/delete, paste-oriented tabular editing, and validation feedback. Maket validates the schema, every row, and every placeholder before rendering. In the preview you can keep the raw template visible, inspect one selected row, or display the complete generated series; print and PDF output expand the bound page across all rows.

You    — crée une série d'étiquettes produit avec le nom et le prix

AI     — maket_doc new doc="Product labels" format=A6 orientation=portrait
         maket_collection action=create name=products
           schema='{"type":"object","properties":{"product_name":{"type":"string"},"price":{"type":"string"}},"required":["product_name","price"]}'
         maket_collection action=add_row name=products
           data='{"product_name":"Earl Grey","price":"12 €"}'
         maket_collection action=add_row name=products
           data='{"product_name":"Sencha","price":"14 €"}'
         maket_collection action=bind doc="Product labels" page=1 name=products
         maket_html set doc="Product labels" page=1
           html='<article data-id="label"><h1 data-id="name">{{ product_name }}</h1><p data-id="price">{{ price }}</p></article>'
         → The preview can show the template, either product, or both generated labels.

You    — exporte toute la série

AI     — maket_pdf doc="Product labels"
         → One PDF page per collection row.

Living documents

Document state is for a single evolving artifact: a checklist, status board, form, or report whose current values belong to that document. maket_state initializes a JSON Schema and data snapshot, validates every update, requires the current revision for mutations, and records each accepted change as a complete immutable revision. Updates re-render the existing pages; they do not create mail-merge variants.

Templates use the supported Mustache subset for display and explicit data-maket-bind attributes for editing. Live mode supports boolean checkboxes, string text inputs, string-enum selects, and buttons that open a terminal-value editor. The same current values render passively in snapshots, print, and PDF output.

<h1 data-id="title">{{ state.title }}</h1>
<label data-id="done-label">
  <input data-id="done-input" type="checkbox" data-maket-bind="state.done">
  Done
</label>
<input data-id="owner-input" type="text" data-maket-bind="state.owner">

Use maket_state action=init to attach the initial schema and data, then get, patch or update, history, revision, and restore to manage it. Portable .maket bundles carry the current schema and data snapshot; importing one starts a fresh local history at revision 1 rather than copying prior revisions. See the document-state HTML binding contract for the exact template, schema, control, and concurrency rules.

Installation details

Pick the row that matches your machine.

Platform

Recommended

What you get

macOS (Apple Silicon or Intel)

Maket App.dmg

Native window, embedded server, agent setup on first launch

Windows x64

Maket App.exe installer

Same

Linux x64

Maket App.deb or .rpm

Native window and embedded server; manual updates

Option A — Maket App

Download the installer from the latest release, using the filename for your platform:

  • macOS Apple SiliconMaket-macOS-arm64.dmg

  • macOS IntelMaket-macOS-x64.dmg

  • Windows x64Maket-Windows-x64-Setup.exe

  • Linux x64Maket-Linux-x64.deb or Maket-Linux-x64.rpm

On macOS, open the .dmg and drag Maket onto Applications. On Windows, run the installer; it sets up the Start menu entry and a desktop shortcut. The macOS build is signed and notarised, the Windows build is signed, so neither should trigger a security warning. On Linux, install the package with your distribution's package manager; updates are downloaded manually from the latest release.

Maket App carries its own runtime — you do not need Node.js installed. On first launch it offers to wire the AI clients it finds on your machine (Claude Code, Codex, Gemini) to its embedded server, and it can install the bundled connector for Claude Desktop. The embedded server listens on 127.0.0.1:24843.

If a Maket server is already running from a previous npm install, the application says so and offers to stop it and take over — nothing is killed without your confirmation.

The window is not the only way in: the Maket menu has Ouvrir dans le navigateur, which serves the same workspace at http://127.0.0.1:24843 in any browser on that machine. Only that machine — the server never binds a public interface, so nothing is exposed to your network.

Updates are checked automatically and installed on your confirmation. The Candidate channel in Settings opts you into validation builds.

Option B — Maket Server via npm (advanced)

# Install Maket and its compatible headless Chromium
npm install -g --allow-scripts=puppeteer @ng-galien/maket

# Wire Maket into your AI client (drop --apply for a dry run)
maket install claude --apply
maket install codex  --apply
maket install gemini --apply

# Start the local server and open the preview
maket start
maket open

The explicit --allow-scripts=puppeteer is required by npm 11+'s dependency script policy. It lets Puppeteer download the exact headless Chromium build declared by the installed Maket release; no browser version is hard-coded by Maket itself. Run maket doctor after installation to prove that Chromium can actually launch, the data directory is writable, and the MCP server responds.

The CLI registers the absolute local Node runtime and installed Maket entry in an mcpServers.maket entry in ~/.claude.json (or runs claude mcp add if the Claude Code CLI is installed), a [mcp_servers.maket] section in ~/.codex/config.toml, or an mcpServers.maket entry in ~/.gemini/settings.json. This standard command-plus-arguments form does not depend on the GUI application's shell PATH. Re-run maket install <client> --apply after moving the Node or Maket installation. Without arguments, the Maket entry runs as a stdio MCP bridge — that's the form Claude Desktop, Codex, Gemini, and other MCP clients invoke automatically.

Daemon controls: maket status, maket logs [--bridge], maket stop, maket restart. Diagnostics: maket doctor, maket config. Upgrade: maket update [--check]. Undo install: maket uninstall <claude|codex|gemini> --apply. Use --scope=project on install claude to write <cwd>/.mcp.json instead of the user-scope file. Global flags --data-dir, --port, --host override the matching MAKET_* env var on any command.

Option C — Clone and hack on it

git clone https://github.com/ng-galien/maket.git
cd maket
npm install
npm run dev

Starts the development server on :24844 and Vite HMR on :5173. The included .mcp.json points an MCP client opened in the project at http://localhost:24844/mcp. Port :24843 is reserved for the installed desktop application.

Code quality and architecture rules

Maket uses code-moniker for structural rules and code-smell review. The versioned rule source is .code-moniker.toml; run npm run smell:rules to inspect the default rules and npm run smell:review to review the repository. The quality gate runs this review through npm run quality.

Do not add enforceable architecture or boundary rules to AGENTS.md, and do not add ad-hoc checker scripts in parallel with code-moniker. AGENTS.md is operator guidance for agents working in the repository; it is not the project's rule engine. If a boundary rule cannot be expressed with code-moniker yet, document that as a code-moniker evolution instead of creating another local rule system.

Exceptions are local and explicit. If a rule is intentionally not applicable, keep the rule enabled and add a targeted suppression comment in the file being checked, for example // code-moniker: ignore[maket-hygiene-limits-callable-size], with a nearby explanation of the design reason.

Option D — Package as a desktop extension (.mcpb)

npm install -g @anthropic-ai/mcpb
npm run build:client
node scripts/pack-mcpb.ts
# → dist/maket.mcpb

Drag dist/maket.mcpb into a desktop MCP host (e.g. Claude Desktop → Settings → Extensions).

Requirements: an MCP-compatible client (Claude Code, Claude Desktop, Codex, Gemini, or similar). Maket App bundles everything else; the npm, clone and .mcpb routes additionally need Node.js ≥22.

CLI reference

maket [command] [--data-dir <path>] [--port <n>] [--host <h>]

  bridge                Run the MCP v2 stdio gateway (default for MCP clients)
  start                 Start the Maket HTTP server in the background
  stop                  Stop a server started by 'maket start'
  restart               Stop (if running) then start
  status                Show whether the server is reachable
  open                  Open the Maket UI in your browser
  logs [--bridge]       Tail server (or bridge) logs
  config                Print the resolved runtime config
  doctor                One-shot diagnostic (node, port, data dir, Chromium, Gmail, npm)
  update [<version>]    Upgrade the CLI (or pin to <version>); --check for a no-op compare
  install <client>      Wire Maket into an MCP client  (claude | codex | gemini)
  uninstall <client>    Remove Maket from an MCP client (claude | codex | gemini)
                          install/uninstall flags: --apply, --scope=user|project
  gmail <sub>           Manage Gmail OAuth state       (status | reset [--force])
  help, version

Tools

Maket exposes 14 compound MCP tools. Each one dispatches multiple actions:

Tool

What it does

maket_doc

Document lifecycle — new, list, delete, duplicate, rename, meta, export/import

maket_learn

Agent onboarding — workflow, HTML composition, chartes, collections, review, install

maket_workspace

Session actions — focus, state, lock, list_messages, ack_messages

maket_page

Page structure — add, remove, rename, reorder, list

maket_canvas

Canvas setup — format, orientation, background, per-side print margins

maket_html

Page content — set (full replace), patch (surgical ops by data-id), get, check (layout overflow / overlap / margin clearance)

maket_charte

Brand chartes — list, view, set, delete

maket_collection

Typed data collections — list, view, create, validate/change schema, add/update/delete rows, bind/unbind a page

maket_state

Document-owned state — initialize, get, update or JSON Patch, validate/change schema, inspect history and revisions, restore

maket_image

Asset library — list, view, meta, import, delete

maket_preview

Open the live preview URL or snapshot a page to PNG

maket_mermaid

Render a Mermaid diagram to SVG and inject it

maket_pdf

Export a document to PDF via headless Chromium

maket_gmail

Gmail — connect, search, read, draft

Layout & print margins guide: docs/layout.md — what the cyan safe-zone in the preview means, margin presets per use case, and prompts to ask the assistant when something looks off.

Plugin & skills

The MCP server exposes maket_learn, the source of truth for agent onboarding. Skills stay thin: they orient Claude, Codex, or Gemini toward the live tool guidance instead of duplicating product knowledge. Human onboarding is separate and opens from the Help button in the Maket UI.

The plugin/claude/ directory ships three agent skills:

  • maket — Orientation skill. Starts with maket_learn, then uses the MCP tools for design work.

  • maket-charte — Brand-identity expert. Builds coherent design-token systems from a brief, an industry, or a reference URL.

  • maket-review — QA agent. Audits charte compliance, image paths, layout overflow; fixes issues via maket_html patch.

Claude, Codex, and Gemini compatibility files live under plugin/.

Configuration

By default Maket stores data in ~/.maket/:

  • documents.db — SQLite (documents, chartes, collections, assets metadata)

  • assets/, documents/, exports/ — user files

Override with environment variables:

Variable

Default

Purpose

MAKET_PORT

24842 (24844 with npm run dev; 3333 with start:isolated)

HTTP server port

MAKET_DATA_DIR

~/.maket/

User data directory

MAKET_DB

$MAKET_DATA_DIR/documents.db

SQLite path

GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET

Gmail OAuth credentials (optional)

Gmail integration (optional, power-user)

Maket can turn a composed document into a Gmail draft (with PDF attachments). It only creates drafts — never sends. You review the draft in Gmail and click Send yourself.

Setup takes about 10 minutes: you register your own OAuth Desktop client in Google Cloud Console, enable the Gmail API, add yourself as a test user, and paste the JSON into Maket's setup form. Credentials live under ~/.maket/ with owner-only permissions — nothing in the repo, nothing on any server.

Full walkthrough + troubleshooting: docs/gmail-setup.md.

Quick CLI helpers once set up:

maket gmail status         # check whether credentials are in place
maket gmail reset --force  # wipe and start over

Bootstrap a downstream workspace

If you run Maket as a long-lived server and want other projects to connect to it:

make bootstrap DIR=/path/to/my-project PORT=3335

Creates .mcp.json, .claude/skills/, and a minimal package.json in the target directory. Never overwrites existing files.

Architecture

┌──────────┐   MCP Streamable HTTP   ┌────────────────────────┐
│ AI agent │ ──────────────────────► │  Express @ :3333       │
│  (any    │                         │  ├─ /mcp  (MCP server) │
│  MCP     │                         │  ├─ /assets, /export   │
│  client) │                         │  └─ WS /ws (preview)   │
└──────────┘                         └────────┬───────────────┘
                                              │
                                     ┌────────┴────────┐
                                     │  SQLite         │
                                     │  ~/.maket/*.db  │
                                     └─────────────────┘
                                              │
                                              ▼ WS broadcast
                                     ┌─────────────────┐
                                     │ React preview   │
                                     │  (Vite, :5173)  │
                                     └─────────────────┘
  • MCP over Streamable HTTP — stateless, one server per request.

  • Awilix DI — every service, tool pack, and HTTP route is registered in packages/server/src/bootstrap.ts.

  • Store → bus → WebSocket — every mutation emits a typed event; the preview reconciles.

  • packages/shared — wire-contract types only (WS messages, HTTP envelopes). Domain types stay per-side.

See CLAUDE.md for the full architectural guide.

Development

npm run dev         # Server + Vite HMR (most common)
npm run quality     # Lint + typecheck + tests (must pass before commit)
npm run test        # vitest

Pre-commit: lefthook runs biome, tsc -b, and vitest — all three must pass.

More scripts: dev:watch (rebuilds client into public/), dev:server, dev:client, build:client, lint:fix, test:coverage. See package.json for the full list.

Contributing

Contributions are welcome. To get started:

  1. Fork the repo and create a feature branch.

  2. Run npm install && npm run dev to set up your environment.

  3. Make your changes; keep them scoped (a bug fix doesn't need surrounding cleanup).

  4. Run npm run quality — it must pass.

  5. Open a PR with a clear description of the change and motivation.

Found a bug, have an idea, or want to discuss something before building it? Open an issue or start a discussion.

Changelog

See CHANGELOG.md for user-visible changes per release. Draft the next [Unreleased] section with npm run changelog:draft (groups commits since the last tag by conventional-commit type).

Agent journal — Field notes from the agents working on Maket.

License

MIT — © Alexandre Boyer

Available Tools

14 tools
maket_canvasA

When to use: set or update the canvas (physical frame) of a document — format, orientation, background, margins. Call this before adding content to a fresh doc, or when switching a doc between formats.

Coordinates are in mm. Paper sizes — A2=420×594, A3=297×420, A4=210×297, A5=148×210, A6=105×148, A7=74×105, A8=52×74. Screen sizes — DESKTOP=288×205 (1440×1024), TABLET=167×239 (834×1194), MOBILE=79×170 (393×852). Unspecified fields keep their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesDocument name.
formatNoPaper (A2–A8, mm) or screen (DESKTOP/TABLET/MOBILE, mm-equivalent). Unspecified keeps the current value.
marginsNoPer-side safe-zone insets in mm: {top, right, bottom, left}. The layout verdict reports `tight` when blocks cross into any band, and the client draws dashed guides at these insets. Unspecified keeps the current value.
backgroundNoCSS background colour. Unspecified keeps the current value. Prefer var(--charte-color-bg) when a charte is loaded.
orientationNoPage orientation. Unspecified keeps the current value.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It clearly indicates a mutating action ('set or update'), explains the partial-update semantics ('Unspecified fields keep their current value'), and provides essential context like units ('Coordinates are in mm') and exact paper/screen dimensions. It does not mention return values or error conditions, but the key behavioral traits are well covered.

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 well-structured and front-loaded with the essential 'When to use' guidance, followed by concise lists of coordinate units, paper sizes, and screen sizes. Every sentence earns its place—there is no fluff. The use of explicit labels and line breaks makes it easily scannable for an AI agent.

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?

Given the tool's complexity (5 parameters, nested object, enums) and the rich schema descriptions, the tool description adds crucial context such as the tool's role in the document lifecycle, exact size mappings, and the critical 'unspecified fields keep current value' behavior. It is sufficiently complete for an agent to select and invoke the tool correctly without needing an output schema.

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?

The input schema already has 100% coverage for all parameters, so the baseline is 3. The description adds valuable semantics beyond the schema: it provides exact dimensions for each paper size and screen size, clarifies that 'coordinates are in mm', and reinforces the partial-update behavior. This enriches the meaning of the 'format', 'margins', and other parameters, warranting a 4.

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 explicitly states the tool's function: 'set or update the canvas (physical frame) of a document — format, orientation, background, margins.' This is a specific verb+resource pairing that clearly distinguishes the canvas tool from sibling tools like maket_page or maket_doc by focusing on the physical frame. The phrase 'physical frame' and the inclusion of 'when switching a doc between formats' further clarify its unique 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?

The description opens with 'When to use' and provides clear scenarios: 'Call this before adding content to a fresh doc, or when switching a doc between formats.' This gives explicit guidance on timing and intent, effectively differentiating from content-adding tools. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a perfect 5.

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

maket_charteA

When to use: manage brand style guides (chartes). view is a prerequisite for any charte-aware HTML edit — it returns the context_token required by maket_html set/patch.

Design tokens become CSS variables (--charte-color-primary, etc.) injected into every page. Voice and rules guide content composition. list — list all chartes with a short colour-palette preview. view — read one charte; returns tokens, voice, rules, and context_token. set — create or overwrite a charte. delete — remove a charte.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRequired for view/set/delete. Unique charte name.
rulesNoFor set: composition rules (titles, photos, layout). Extra keys allowed.
voiceNoFor set: voice guidelines (personality, formality, do/dont, vocabulary, examples).
actionYesOperation to run. See the tool description for the action table.
tokensNoFor set: design tokens grouped by category. Become CSS variables --charte-<group>-<key>. Example: {"color": {"primary": "#2563EB"}, "font": {"heading": "Montserrat"}, "spacing": {"page": "20mm"}}.
descriptionNoFor set: one-line human description.

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses important side effects: set overwrites, delete removes, and tokens are injected as CSS variables into every page. It doesn't mention permissions or reversibility, but the core behavioral traits are covered.

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 compact and front-loaded: a 'When to use' sentence, a sentence on behavioral effects, then a clean four-line action table. Every sentence earns its place without filler or redundancy.

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 tool with no output schema and nested objects, the description covers key outputs (view returns tokens, voice, rules, context_token; list returns colour-palette preview), cross-tool requirements, and side effects. It is complete enough for an agent to invoke each action correctly.

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?

The schema already covers all six parameters, but the description adds semantic value by explaining the action enum in the action table, noting that name is conditionally required for view/set/delete, and giving a concrete tokens example with the CSS variable naming convention. This goes well beyond the baseline for high schema coverage.

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?

Clearly identifies the tool's role as managing brand style guides (chartes) and enumerates four distinct actions (list/view/set/delete). It differentiates from siblings by tying the view action to the context_token required by maket_html set/patch.

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

Usage Guidelines5/5

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

Explicitly opens with 'When to use' and states that view is a prerequisite for charte-aware HTML edits, naming maket_html set/patch as the dependent consumer. The action table provides clear per-action descriptions, making it easy to select the right operation.

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

maket_collectionA

When to use: manage data collections used by page placeholders.

Collections are typed by JSON Schema and contain ordered members. A page can be bound to one collection; rendering then produces one page per member. list — list collections. view — read one collection with fields and members. create — create an empty collection from a JSON Schema. validate_schema — check a schema against existing members without saving. change_schema — apply a schema only when existing members validate. add_row / update_row / delete_row — edit collection members. delete — remove a collection. bind / unbind — bind or clear a collection on a document page. cursor — read or move a bound page's preview cursor (doc + page required). Without mode/row it reads; with mode (template|rendered|all) and/or row (member id or 1-based number) it moves. The human's live canvas, this cursor and the exports all share this state.

ParametersJSON Schema
NameRequiredDescriptionDefault
docNo
rowNo
dataNo
modeNo
nameNo
pageNo
actionYes
schemaNo
descriptionNo

TDQS

A4/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. It discloses that collections are typed by JSON Schema, contain ordered members, and that rendering produces one page per member. It also explains cursor behavior and state sharing ('The human's live canvas, this cursor and the exports all share this state') and validation behavior for change_schema. It does not cover side effects of delete or all actions, but provides meaningful behavioral context.

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?

The description is well-structured with a 'When to use' intro and a bulleted list of actions. The cursor explanation is somewhat lengthy but necessary. Overall, it is organized and front-loaded, with little wasted text.

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

Completeness3/5

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

The tool is complex (9 parameters, many actions) with no output schema and no annotations. The description gives a comprehensive overview of all actions and even notes parameter requirements for cursor, but it lacks per-action parameter details (e.g., which parameters are needed for 'create' or 'bind') and does not describe return values or outputs. This leaves gaps for an agent to correctly invoke the tool.

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?

Schema description coverage is 0%, so the description must compensate. It does explain the semantics of the action enum values (e.g., 'cursor — read or move a bound page's preview cursor' and specifically notes 'doc + page required'). However, it does not describe other parameters like 'data', 'name', 'schema', or 'description' in detail, leaving some parameters underspecified.

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 opens with 'manage data collections used by page placeholders,' providing a specific verb and resource. The list of actions (list, view, create, etc.) clearly distinguishes this tool from siblings like maket_page and maket_canvas.

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?

The explicit 'When to use' heading and the description of collections (typed by JSON Schema, ordered members, page binding) give clear context for when this tool applies. It does not mention when not to use it or alternative tools, but the specificity of page placeholders makes the usage context unambiguous.

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

maket_docA

When to use: every persistent document-lifecycle operation — create, clone, rename, delete, list, update metadata, or move bundles in/out. For session-level actions (open a doc/page in the preview, inspect state, lock), use maket_workspace. For per-page edits use maket_page and for content use maket_html.

doc is the doc in scope for every action except list. name only appears when you need a NEW name (duplicate, rename).

Manage design documents (the workspace unit: canvas + pages + meta). new — create a blank document at doc; sets it active. Previous unsaved work is lost. list — enumerate saved documents as a hierarchy of category paths. delete — remove doc permanently; refused if it's the only document left. duplicate — clone docname (format variants, A/B copies). rename — rename docname. meta — update doc's metadata: designNotes, teamNotes, rating, category, charte. export — write a portable .maket bundle to EXPORTS_DIR. By default the bundle embeds referenced asset binaries (images, SVGs) so it survives transfer to another machine or a fresh datadir. Pass include_assets=false for a lighter structure-only snapshot. Include doc for a single document, docs for a list, or omit both to export every document. Referenced chartes, collections, and current document-state snapshots are embedded automatically; revision history stays local. Override the filename with output. import — load a .maket bundle from input (absolute path or EXPORTS_DIR-relative). Documents land with conflict-renamed names; chartes and collections skip names that already exist. Current document-state snapshots initialize revision 1, and assets are restored to ASSETS_DIR with the existing collision rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
docNoThe doc in scope. Required for every action except list. For new: the new doc's name (must be unique). For delete/meta: the doc to act on. For duplicate/rename: the source doc.
docsNoFor export: list of doc names to include in the bundle. Omit to export all documents. Ignored by other actions.
nameNoThe new name. Only used by duplicate (clone's name) and rename (new name).
inputNoFor import: absolute or EXPORTS_DIR-relative path to a .maket file to load.
actionYesOperation to run. See the tool description for the action table.
charteNoFor new/meta: name of an existing charte to associate with this document. The charte itself is applied later via maket_charte view.
formatNoFor new: paper/screen format. Default A3. Paper sizes are mm; DESKTOP/TABLET/MOBILE are screen aspect ratios scaled to mm.
outputNoFor export: output filename (defaults to <doc>.maket or maket-bundle.maket). Absolute paths are honoured; bare names land in EXPORTS_DIR.
ratingNoFor meta: 0–5 star rating (clamped).
marginsNoFor new: per-side safe-zone insets in mm {top, right, bottom, left}. Optional.
categoryNoFor new/meta: category path separated by / (for example clients/acme). Flat values remain valid roots; default general.
teamNotesNoFor meta: team-facing notes (visible in the UI).
backgroundNoFor new: canvas background colour (CSS). Default #ffffff.
designNotesNoFor meta: designer-facing notes (visible in the UI).
orientationNoFor new: page orientation. Default portrait.
include_assetsNoFor export: embed referenced asset binaries (images, SVGs) in the bundle. Default true — produces a portable .maket that survives transfer to another machine or datadir. Set false for a structure-only snapshot (smaller, git-friendly).

TDQS

A4.8/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 burden of behavioral disclosure and does so thoroughly. It discloses side effects: 'new... sets it active. Previous unsaved work is lost'; deletion 'refused if it's the only document left'; export embeds assets by default and import renaming/conflict behavior; revision history stays local; current state snapshots initialize revision 1. This is rich, honest, and prevents misuse.

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?

The description is long, but appropriately so for an 8-action tool with 16 parameters. It is front-loaded with a 'When to use' paragraph, and the action table is structured with bold names and bullet-like details. No filler sentences; every line conveys operational information. It could be slightly tightened, but it earns the length.

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?

This is a complex, multi-action tool with no output schema and no annotations. The description covers every action's purpose, parameter constraints, defaults, side effects, and edge cases (e.g., single-document deletion refusal, export portability, import conflict resolution). It provides sufficient context for an agent to invoke any action correctly without referring to external documentation.

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 100%, so the baseline is 3. The description adds value beyond the schema with a concise rule: 'doc is the doc in scope for every action except list. name only appears when you need a NEW name.' It also summarizes export/import parameter semantics (include_assets, docs, output, input) and clarifies action-parameter relationships. This elevates it slightly above baseline.

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 clearly states the tool's purpose: 'Manage design documents (the workspace unit: canvas + pages + meta)' and enumerates all actions (new, list, delete, duplicate, rename, meta, export, import). The opening 'When to use' paragraph explicitly distinguishes it from sibling tools (maket_workspace, maket_page, maket_html), making its scope unambiguous.

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

Usage Guidelines5/5

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

The description opens with explicit guidance: 'When to use: every persistent document-lifecycle operation...' and names alternatives for session-level actions, per-page edits, and content. It also provides per-action details, such as which parameters apply to which action, giving the agent clear decision rules.

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

maket_gmailA

When to use: connect Gmail, search/read mail, download an attachment, or create a draft from a Maket document. All actions except connect require an active OAuth session — call connect first.

connect — restore the refresh token if present, otherwise open the browser for OAuth consent. Pass with_read=true to also request inbox access (drafts are always granted). search — list subject/from/date for messages matching a Gmail query. Capped at 50. Requires with_read=true at connect time. read — fetch one message by id: headers, body (3000-char truncated), attachments listing. Requires with_read=true at connect time. fetch_attachment — download one attachment (id + attachmentId from a prior read). Images land in the Maket asset library (validated, optimized, thumbnailed, metadata row). Other files (PDF, zip, docx, …) drop into /attachments/ untouched. Requires with_read=true at connect time. draft — compose a Gmail draft from a document page. Charte tokens resolve to literals, assets inline as base64, listed docs attach as PDFs. Maket never sends — the user reviews and sends from Gmail.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoFor draft: cc. Falls back to doc.meta.emailCc.
idNoFor read: Gmail message id (from search results).
toNoFor draft: recipient. Falls back to doc.meta.emailTo when omitted.
bccNoFor draft: bcc. Falls back to doc.meta.emailBcc.
docNoFor draft: Maket document to use as the email body.
pageNoFor draft: 1-based page number within the document.
queryNoFor search: Gmail query (same syntax as the UI: from:, subject:, after:, etc.).
actionYesOperation to run. See the tool description for the action table.
qualityNoFor draft: PDF quality preset for attachments. Default screen (smaller).
subjectNoFor draft: subject. Falls back to doc.meta.emailSubject.
categoryNoFor fetch_attachment (image branch only): category tag saved with the asset row. Default email-attachment.
filenameNoFor fetch_attachment: override the saved filename. Defaults to the name reported by Gmail.
overwriteNoFor fetch_attachment: replace an existing file (asset or non-image drop) when set. Default false.
with_readNoFor connect: also request read access (inbox search + message read). Default false — Maket only creates drafts.
maxResultsNoFor search: cap on results. Default 10, max 50.
attachmentsNoFor draft: names of other Maket docs to attach as PDFs. Falls back to doc.meta.emailAttachments.
attachmentIdNoFor fetch_attachment: Gmail attachment id from a previous action=read call.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries full disclosure burden and does an excellent job. It reveals OAuth flow, token restoration, read-body truncation to 3000 chars, search cap of 50, image handling (validated/optimized/thumbnailed/metadata row) vs non-image handling (untouched in <DATA_DIR>/attachments), and the 'never sends' policy for drafts.

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 well-structured: a one-sentence 'When to use' summary followed by a compact action table. Every sentence earns its place; there is no fluff or repetition. The action-table format makes the multi-action tool easy to scan.

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?

With no output schema, the description explains what each action returns (search lists subject/from/date, read returns headers/truncated body/attachments listing) and where files land. It covers prerequisites, side effects, and limitations (capped results, truncated body), making the tool fully comprehensible.

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 already has 100% parameter coverage, the description adds cross-action context and fallback semantics (e.g., to falls back to doc.meta.emailTo, with_read defaults to false, fetch_attachment requires a prior read call). It also clarifies which parameters apply to which action, making it far more useful than schema descriptions alone.

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 opens with a specific 'When to use' statement listing exactly the operations (connect Gmail, search/read mail, download attachments, create drafts). Each action in the table has a clear verb+resource (connect, search, read, fetch_attachment, draft), distinguishing it from sibling tools like maket_pdf or maket_preview.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool and prerequisites: 'All actions except connect require an active OAuth session — call connect first.' Each action is described with its specific conditions (e.g., 'Requires with_read=true at connect time'), and the draft action clarifies that Maket never sends, so the user reviews and sends from Gmail.

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

maket_htmlA

When to use: read and write page HTML. Pick set for the initial skeleton, patch for iterative edits, get to read, check to measure overflow without writing.

Every visible element MUST have a data-id. Use flex/grid with mm units. When a charte is loaded, prefer var(--charte-*) tokens. The compliance check is narrow: it rejects (1) hardcoded colour literals that duplicate an existing charte token value (e.g. #2563EB when primary=#2563EB), (2) any hardcoded font-family when the charte defines fonts, (3) any hardcoded box-shadow when the charte defines shadows. Fresh colours that don't duplicate a token pass untouched. Layout override: data-maket-layout="ignore" excludes exactly one marked non-interactive leaf block from overflow, overlap, clipping, and margin checks. The block must have no child elements or text; controls, links, data-maket-bind and focusable/ARIA elements are ineligible. Reserve it for intentional non-content decoration after visual review. Add it only with maket_html action=patch using attr on an existing data-id; the enabling op must be the only op in that patch request. Set, insert, replace, and content HTML cannot introduce it. For a state-backed document, Mustache is display-only. The document must author editable controls and all their CSS explicitly: data-maket-bind supports for booleans, for strings, for string enums, and for the single-value editor. Use state.foo at the root and relative foo inside state sections; never persist data-maket-path or other runtime attributes. set — REPLACE the full page HTML. Rejects the whole payload on any violation. Requires context_token when the doc has a charte. patch — apply ops by data-id: style/content/attr/insert/replace/remove/clone/moveTo. Violating ops roll back individually, the rest still apply. get — return current HTML; pass id= for a single element, format=text to strip tags. check — measure layout against the canvas + declared canvas.margins; no side effects. Status: ✓ OK, ⚠ tight (block crosses a declared margin band — tighten or move into the safe zone before shipping), ⛔ overflow (block escapes the canvas, not shippable; pairwise overlaps between [data-id] blocks are reported under this same status), or ⛔ unchecked when headless validation could not run. On tight/overflow, the next: block points to a snapshot + targeted patch; unchecked is diagnostic-only to avoid blind retry loops.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFor get: data-id of a single element to return; omit to fetch the whole page.
docYesDocument name (always required).
opsNoFor patch: list of surgical ops by data-id. Each op has `id` plus one of: style (object), content (string), attr (object), insert (html) + optional position, replace (outerHTML), remove (true), clone (newId), moveTo (targetId) + optional position. To exclude one intentional non-interactive leaf decoration with no child elements or text from layout validation, patch that existing element with attr: {"data-maket-layout":"ignore"}; controls, links, data-maket-bind and focusable/ARIA elements are ineligible. This override is rejected in set/insert/replace/content HTML, and its enabling op must be the only op in the patch request.
htmlNoFor set: full page HTML. Every visible element MUST carry a data-id. Use flex/grid with mm units; images use relative filenames (src="photo.jpg"); colours/fonts come from var(--charte-*). Example: <div data-id="page" style="width:210mm;height:297mm;display:flex;flex-direction:column;padding:15mm"><h1 data-id="title">Hello</h1></div>.
pageYesPage number, 1-based (always required).
actionYesOperation to run. See the tool description for the action table.
formatNoFor get: 'html' (default, full markup) or 'text' (tags stripped).
context_tokenNoFor set: charte context token from maket_charte view. REQUIRED when the document has a charte — proof the brand guidelines were read first.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses failure modes (set rejects whole payload, patch rolls back individually), side-effect expectations (check has no side effects), prerequisites (context_token required with charte), layout override eligibility, and detailed compliance rules. It also explains check statuses (OK, tight, overflow, unchecked) and what triggers them, making behavior highly transparent.

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?

The description is long but well-structured: it leads with a 'When to use' summary, then details compliance rules, layout override, state-backed document rules, and an action table. Each section adds necessary information, though there is some redundancy with schema content (e.g., data-id requirement appears in both). Given the tool's complexity, the length is justified and the organization helps an agent parse it.

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?

The tool has no output schema, so the description must explain return values and behaviors. It does so thoroughly: get's format parameter (html/text), check's statuses and next steps, patch's rollback behavior, and set's validation approach. It also covers edge cases like unchecked validation and the layout-override caveats. For a tool with this many actions and rules, the description is impressively complete.

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?

Schema description coverage is 100%, so all parameters are already described in detail (e.g., ops structure, html example, context_token purpose). The description adds some behavioral context (e.g., when context_token is required, layout override constraints), but most of it complements rather than meaningfully extends the schema. The baseline of 3 is appropriate because the schema does the heavy lifting and the description adds incremental value.

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 opens with 'read and write page HTML' and then enumerates four distinct actions (set, patch, get, check) with precise verbs and targets. This clearly identifies the resource (page HTML) and differentiates the tool's internal operations, though it doesn't explicitly contrast with sibling tools. The action table makes the tool's purpose unmistakable.

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?

The description explicitly says 'Pick set for the initial skeleton, patch for iterative edits, get to read, check to measure overflow without writing', which gives excellent action-level usage guidance. It also implies when not to use check ('without writing'). However, it does not name alternative sibling tools (e.g., maket_page, maket_canvas) for scenarios where this tool should not be used, so it's clear but not fully complete on external alternatives.

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

maket_imageA

When to use: manage the asset library (images). viewmeta is a required two-step: meta refuses any write without the context_token from the latest view call — proof the image was read before metadata is attributed.

Images live on disk under the assets dir; metadata lives in the store; both move together. list — list assets grouped by category; flags items missing metadata. view — load an asset inline (text + binary image) and return its context_token. MUST be called before meta. meta — write/update metadata; rejects without a current context_token. import — copy an asset in via url, path, or register-mode (filename-only for already-present files). Auto-optimises + thumbnails. delete — remove the file, thumbnail, and metadata row.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFor import: HTTP(S) URL to download from.
pathNoFor import: local filesystem path to copy from.
tagsNoFor meta/import: searchable tags.
titleNoFor meta/import: human title.
actionYesOperation to run. See the tool description for the action table.
creditNoFor meta/import: attribution / photographer credit.
categoryNoFor list: filter to this category. For meta/import: category tag.
filenameNoAsset filename. Required for view/meta/delete. For import: destination filename (required in register-mode, derived from url/path otherwise).
overwriteNoFor import: overwrite an existing file with the same name.
descriptionNoFor meta/import: long prose.
orientationNoFor meta/import: orientation hint (landscape/portrait/square).
context_tokenNoFor meta (REQUIRED): token returned by the matching view call. Proves the image was read before its metadata is written.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full disclosure burden. It reveals disk storage, metadata store, combined movement, delete side effects (removes file, thumbnail, and metadata row), and the auto-optimisation/thumbnail behavior on import. It also discloses the authorization mechanism (context_token rejection). This is thorough behavioral transparency.

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 dense yet perfectly scoped: a one-sentence overview, a two-step workflow explanation, and a compact bulleted action list. Every sentence adds distinct value—no filler or repetition. The structure is scannable and front-loaded with the most critical constraint (the two-step rule).

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 tool with 12 parameters and 5 operations, the description covers all actions, the critical ordering constraint, storage model, and side effects. It mentions some return behavior (context_token, listing flags). However, without an output schema, it omits details about error conditions and full response formats, which would improve completeness for an agent deciding to invoke it.

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?

Schema description coverage is 100%, and every parameter already has a detailed schema description. The tool description adds a high-level action table but no parameter-level detail beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting; the description does not meaningfully compensate but also doesn't need to.

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 opens with 'manage the asset library (images)'—a specific verb and resource that clearly distinguishes this tool from sibling content tools. It then enumerates the five sub-actions (list, view, meta, import, delete) with concise definitions, making the tool's scope unmistakable.

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

Usage Guidelines5/5

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

Explicitly states the required two-step sequence for metadata writes: 'view → meta is a required two-step' and 'MUST be called before meta.' It also explains why (context_token proves the image was read). While it doesn't name sibling tools as alternatives, the asset-library scope and action table give unambiguous when-to-use guidance.

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

maket_learnA

When to use: first call for any agent entering Maket; source of operational guidance for using Maket MCP tools correctly.

This is not the user-facing Help document. It teaches agents how to operate Maket: workflow, HTML composition, chartes, collections, living document state, review loop, and client installation.

Actions: overview — short operating model. topics — list available topics. topic — read one topic with topic=.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoRequired for action=topic.
actionNoDefault: overview.
audienceNoDefault: agent.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It explains the tool's actions and their effect (e.g., 'topic — read one topic'), making clear it is an informational/learning resource. It does not explicitly state 'read-only', but the actions ('list', 'read', 'overview') strongly imply no side effects. Minor gap is the absence of explicit non-mutating language.

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 well-organized with a clear 'When to use' lead, a clarifying note, and a structured action list. Every sentence adds value, and the format is scannable for an agent.

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?

The description fully covers the tool's purpose, usage context, and available actions. Since there is no output schema, but the tool is a simple informational resource, the description is sufficient for an agent to select and invoke it correctly.

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 100%, so baseline is 3, but the description adds meaning beyond the schema by describing each action in plain language ('overview — short operating model', 'topics — list available topics'). It also clarifies the relationship between action and topic. This elevates it to 4.

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 clearly states this tool is the first call for agents entering Maket and is a source of operational guidance. It explicitly distinguishes itself from the user-facing Help document, and lists concrete actions (overview, topics, topic) that define its scope.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance ('first call for any agent entering Maket') and clearly defines what it is not (not the user-facing Help document). It orients the agent to use this as a prerequisite for other Maket tools.

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

maket_mermaidA

When to use: add a diagram to a page. Works for flowcharts, sequence, class, ER, state, and XY chart diagrams. Pick this over manual SVG or nested divs when the thing you want is conceptually a graph.

Renders Mermaid syntax to SVG and injects it into the page HTML. The diagram scales with its wrapper (width/height drive the frame, not the SVG itself). If dataId already exists, the diagram is replaced in place — idempotent edits. Header on its own line: graph TD\n A-->B (NOT graph TD; A-->B)

ParametersJSON Schema
NameRequiredDescriptionDefault
bgNoBackground color (hex). Overrides theme bg.
fgNoText/foreground color (hex). Overrides theme fg.
docYesDocument name
codeYesMermaid diagram syntax. Header on its own line, then statements. E.g. "graph TD\n A-->B\n B-->C".
lineNoLine/connection color (hex). Overrides theme line.
pageYesPage number (1-based)
themeNoBuilt-in theme name. Can be combined with custom color overrides.
widthNoCSS width for the wrapper (e.g. "180mm", "100%"). Default: auto.
accentNoArrow/accent color (hex). Overrides theme accent.
dataIdNodata-id for the wrapper element. Default: auto-generated (mermaid-1, mermaid-2...)
heightNoCSS height for the wrapper (e.g. "120mm"). Default: auto.
positionNoWhere to insert relative to target. Default: beforeend.
targetIdNodata-id of parent element to insert into. Default: page root.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the transparency burden. It discloses core behaviors: rendering to SVG, injecting into page HTML, scaling with the wrapper, and idempotent replacement when dataId already exists. It also warns about header formatting syntax, providing concrete behavioral detail beyond any structured fields.

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 well-structured and front-loaded with usage guidance. Each sentence adds value: when to use, behavior, idempotency, and a critical formatting tip. No redundant filler; appropriate length given the tool's 13 parameters.

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 complex tool with no output schema and high parameter count, the description covers the essential context: supported diagram types, practical use cases, behavior on repeated execution, and syntax requirements. Combined with the 100% schema descriptions, an agent has sufficient information to select and invoke the tool correctly.

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 100%, so the schema already documents all parameters. The description adds valuable context beyond the schema: the code header rule (header on its own line, not semicolon) and the scaling behavior driven by width/height. This enhances parameter understanding, though not extensively.

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?

Clearly states the tool's function: 'add a diagram to a page' and 'Renders Mermaid syntax to SVG and injects it into the page HTML.' It lists supported diagram types and distinguishes from manual SVG/nested divs, aligning with sibling differentiation.

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

Usage Guidelines5/5

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

Provides an explicit 'When to use' section and direct comparison: 'Pick this over manual SVG or nested divs when the thing you want is conceptually a graph.' This gives actionable guidance on selecting this tool over alternatives and implies non-graph content should use other methods.

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

maket_pageA

When to use: manage page structure within a document — add, remove, rename, reorder, list. For page content, use maket_html instead.

Manage pages within a document (structure only, not content). add — append a new page with initial HTML; sets it active. remove — delete a page by 1-based index or name; refused if it's the last page. rename — rename a page by index or current name. reorder — move a page from one 1-based position to another; activePage adjusts. list — list pages with element counts; the active page is marked ●.

Note: charte compliance (token-literal colours, font-family, box-shadow) is enforced by maket_html set/patch, not by maket_page add. If the new page must match a charte, follow maket_page add with maket_html set to validate.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoFor reorder: target 1-based position.
docYesDocument name (always required).
fromNoFor reorder: source 1-based position.
htmlNoFor add: HTML body for the new page. Relative image src values are normalized to /assets/...
nameNoFor add/rename: page name (new page name, or rename target).
pageNoFor remove/rename: target page — either 1-based index or page name.
actionYesOperation to run. See the tool description for the action table.

TDQS

A4.6/5.0
Behavior4/5

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

Without annotations, the description carries the full burden and discloses concrete behaviors: add sets the active page, remove is refused if it's the last page, reorder adjusts activePage, and list marks active with ●. It also delegates charte enforcement to maket_html. It does not mention return values or all edge cases, but is substantially transparent.

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 well-structured: a short 'When to use' intro, a bulleted action list, and a note about charte. It front-loads the purpose and avoids superfluous language, with each sentence contributing meaningful guidance.

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 tool with five operations and seven parameters, the description covers the operations' effects, exclusions, and cross-tool coordination with maket_html. It omits explicit return-value details for non-list actions, but the actions are straightforward and the core behavior is adequately described.

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?

Even though schema coverage is 100%, the description's action table clarifies which parameters apply to each action, which the schema does not specify per-action (e.g., add requires name and html; reorder requires from and to). This adds practical parameter semantics beyond the schema.

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 clearly defines the tool as managing page structure within a document, enumerates five specific actions (add, remove, rename, reorder, list), and explicitly contrasts with maket_html for content, distinguishing it from siblings.

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

Usage Guidelines5/5

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

It begins with an explicit 'When to use' line, states that for page content one should use maket_html instead, and provides a follow-up for charte compliance, giving clear when-to-use and when-not-to-use guidance.

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

maket_pdfA

When to use: export a document to PDF for sharing or print. One call renders every page in order. For a single-page raster (PNG), use maket_preview snapshot instead.

Renders every page via headless Chromium at the canvas's true mm size, then writes to EXPORTS_DIR/.pdf. Charte CSS is inlined so fonts and tokens render identically to the live preview. quality — screen (96 DPI, smallest), print (150 DPI, default), hd (300 DPI). rows — collection-bound pages: preview (default, follows the page cursor), current (cursor row only), all (one page per row), template (raw placeholders). Check the cursor first with maket_collection action=cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesDocument name.
rowsNoFor pages bound to a collection: preview (default) follows each page's cursor — what the live canvas shows; current = the cursor's row only; all = one page per row (mail merge); template = raw placeholders.
qualityNoDPI preset: screen=96, print=150 (default), hd=300.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description discloses key behavioral traits: headless Chromium rendering at true mm size, output to EXPORTS_DIR/<doc>.pdf, inlined Charte CSS for identical fonts/tokens, and the semantics of the rows parameter. It does not explicitly mention file overwrite behavior, but the provided detail is strong.

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?

The description is well-structured with a clear 'When to use' intro, a behavior paragraph, and a bullet-like list for parameters. It is a bit longer than strictly necessary but every sentence earns its place, and critical information is front-loaded. It earns a 4, not 5, due to minor redundancy.

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 tool with no annotations and no output schema, the description covers purpose, alternatives, rendering details, output location, parameter meanings, and prerequisites. It is thorough and self-contained, leaving few open questions for an agent deciding how to invoke it.

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?

Although schema coverage is 100% (baseline 3), the description adds meaningful context beyond the schema: it explains DPI presets (screen/print/hd) with numeric values, and elaborates on rows values (preview/current/all/template) with practical examples like mail merge. This enriches the bare schema definitions.

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 explicitly states 'export a document to PDF for sharing or print' with a specific verb and resource. It also distinguishes itself from the sibling tool maket_preview by noting that for a single-page raster (PNG), maket_preview snapshot should be used instead.

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

Usage Guidelines5/5

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

The description leads with 'When to use:' and explicitly names the alternative tool (maket_preview) for a different use case. It also advises checking the cursor first with maket_collection action=cursor when using collection-bound pages, providing clear situational guidance.

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

maket_previewA

When to use: view documents outside the agent. open flips the live preview URL into the user's browser; snapshot rasterises a single page to PNG at its true mm size.

open — launch the live preview URL (localhost) in the default browser. No params. snapshot — render a page via headless Chromium. Returns the PNG inline (binary) and as a file path on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
docNoDocument name. Required for snapshot.
pageNo1-based page number. Required for snapshot.
pathNoFor snapshot: output PNG path. Defaults to EXPORTS_DIR/<doc>.png.
actionYesOperation to run. See the tool description for the action table.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description fully carries the behavioral disclosure burden. It reveals that `open` launches a browser (localhost) and `snapshot` uses headless Chromium, returns a PNG inline, and writes to a file path on disk. This covers side effects like browser launch and file output; however, it doesn't mention default export paths or potential permission requirements, so it's not exhaustive.

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 compact but information-dense: a single 'When to use' sentence plus a formatted action table. No redundant words, and the structure (overview then two bullets) makes it easy to scan. Every sentence 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?

Given 4 parameters, no output schema, and no annotations, the description covers the tool's core functionality well, including output format for `snapshot` and the browser action for `open`. It lacks some details about edge cases, error behavior, or default output paths, but is otherwise sufficient for a preview tool.

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 description coverage is 100%, so baseline is 3. The description adds value by grouping actions and clarifying which parameters apply to each (e.g., 'open — No params' and schema notes that doc/page are required for snapshot). This goes beyond the raw schema descriptions, earning a 4.

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 clearly states the tool's purpose: 'view documents outside the agent' and then details two distinct operations (`open` and `snapshot`). It uses specific verbs ('launch', 'rasterises') and resources ('live preview URL', 'single page to PNG'), making it easy to distinguish from sibling tools like `maket_pdf` or `maket_image`.

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?

The description opens with 'When to use: view documents outside the agent,' providing a clear usage context. It also distinguishes between the two actions (`open` for browser launch, `snapshot` for PNG rendering), but does not explicitly mention when *not* to use this tool or compare it to sibling alternatives, so it falls short of a 5.

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

maket_stateA

When to use: attach durable data and immutable snapshot history to one living document.

Document state is separate from collections and mail merge. A state-backed document renders Mustache variables, sections, inverted sections, and loops from its latest revision. Every mutation stores a complete validated schema + data snapshot. The target interface is document-owned standard HTML/CSS: Mustache interpolation is display-only. Editable terminal values must be declared explicitly with data-maket-bind on (boolean), (string), (string enum), or (single-value editor). Use state.foo at the root and relative foo inside {{#state.items}} sections. Maket resolves transient JSON Pointers and synchronizes the store; it does not generate or style controls. init — attach a schema and initial data to a static document (revision 1; no expected_revision). get — read the schema and current revision. update — append a complete state snapshot; expected_revision is required. patch — apply RFC 6902 JSON Patch operations; expected_revision is required. validate_schema — validate a proposed schema against current or supplied data without saving. change_schema — atomically replace the schema and append compatible data; expected_revision is required. history — list immutable revisions newest first. revision — read one revision. restore — append a new revision containing an older schema + data snapshot; expected_revision is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
docYesTarget document name.
dataNoComplete state object required by init/update; optional compatible data for schema validation/change.
patchNoRFC 6902 operations required by action=patch.
actionYesDocument-state operation to perform.
schemaNoJSON Schema required by init, validate_schema, and change_schema.
revisionNoHistorical revision required by revision and restore.
expected_revisionNoCurrent revision required by update, patch, change_schema, and restore; not used by init.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description fully carries disclosure. It reveals key behaviors: every mutation stores a complete validated schema + data snapshot, revisions are immutable, Mustache rendering is display-only, and editable values need explicit data-maket-bind declarations. It also details the expected_revision requirement and init behavior (revision 1).

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?

The description is long but well-structured, starting with 'When to use' and then a bulleted action list. The middle paragraph about Mustache binding is detailed and necessary for understanding the tool's interaction model. While not ultra-concise, it is appropriately sized for a multi-action tool with 7 parameters.

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?

Without an output schema, the description explains the result of each action in words (e.g., 'read the schema and current revision', 'list immutable revisions newest first'). It also covers the data-binding model, required bindings, and the distinction between display-only Mustache and editable values. This is comprehensive for the tool's complexity.

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 covers 100% of parameters, the description adds significant action-specific semantics. It explains which parameters are required for which action (e.g., patch requires patch array, revision requires revision number, update requires complete data), and clarifies that init does not use expected_revision. This goes well beyond the schema's one-line descriptions.

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 opens with a specific verb and resource: 'attach durable data and immutable snapshot history to one living document.' It clearly distinguishes from siblings by stating 'Document state is separate from collections and mail merge,' and the list of nine actions (init, get, update, patch, etc.) further specifies the tool's scope.

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

Usage Guidelines5/5

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

Explicit 'When to use:' heading sets context. It explains when the tool is appropriate (durable data, immutable history) and when not ('separate from collections and mail merge'), and clarifies that it does not generate or style controls. Each action's description also indicates when it is required (e.g., expected_revision for mutations).

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

maket_workspaceA

When to use: every session-level interaction with the live workspace — open a doc/page in the preview, inspect a doc's current state, toggle its lock, and process the user-message queue. For persistent CRUD on documents (create, rename, delete, duplicate, meta, import/export) use maket_doc.

focus — open doc at page page in the live preview (sets active doc + active page). state — summarise doc's current state: canvas, pages with element counts and data-source cursors (collection · mode · row), charte, pending messages. lock — lock or unlock doc. When locked, every doc-scoped mutation refuses until it's unlocked. Pass locked=true/false, or omit to toggle. fit_view — zoom out the client to fit the whole workspace (same as the Maximize button). list_messages — return every pending user message across all docs and the workspace bucket as JSON. Each message carries its own docName (or none for workspace scope). ack_messages — drop the given ids from whichever bucket they live in.

ParametersJSON Schema
NameRequiredDescriptionDefault
docNoThe document in scope. Required for focus/state/lock. Do not pass it for list_messages; that action returns every queued user message across all documents and the workspace.
idsNoFor ack_messages: message ids to mark processed.
pageNoFor focus: 1-based page number to make active.
actionYesOperation to run. See the tool description for the action table.
lockedNoFor lock: true to lock the document, false to unlock. Omit to toggle.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses the lock's blocking behavior, that list_messages returns all pending messages across docs and workspace, and that ack_messages drops the specified ids. The action-by-action semantics are clearly stated.

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 front-loaded with the primary usage distinction, then uses a concise action-by-action table format. No superfluous sentences; every line adds needed operational detail.

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 multi-action tool without an output schema, the description covers each action's behavior, lists prerequisites, and indicates return expectations (e.g., JSON for list_messages). The alternative tool for other operations is provided, rounding out the context.

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?

The schema already provides 100% parameter descriptions, and the tool description reinforces action-specific parameter usage (e.g., doc required for focus/state/lock, omitted for list_messages; locked toggle behavior). This adds value by summarizing the action-to-parameter mapping, although most details exist in the schema.

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 states specifically that it handles session-level interactions with the live workspace, then enumerates six concrete actions. It also differentiates itself from the sibling maket_doc tool for persistent CRUD, making its scope unmistakable.

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

Usage Guidelines5/5

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

The opening 'When to use' sentence defines the tool's context and explicitly directs persistent document CRUD to maket_doc. Each action is described with its trigger and expected effect, leaving no ambiguity about when to invoke it.

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. Dates show when Glama detected each change.

  1. 14 tool updatesv1.7.0
    • Changedmaket_canvas1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_charte1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_collection1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_doc2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / category / description
        Previous value: -"For new/meta: category tag used for grouping in list (default general)."New value: +"For new/meta: category path separated by / (for example clients/acme). Flat values remain valid roots; default general."
    • Changedmaket_gmail1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_html1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_image1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_learn1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_mermaid1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_pdf1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_preview1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_state1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmaket_workspace1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. 3 tool updatesv1.5.0
    • Changedmaket_html1 field changed
      • changedInput schema / properties / ops / description
        Previous value: -"For patch: list of surgical ops by data-id. Each op has `id` plus one of: style (object), content (string), attr (object), insert (html) + optional position, replace (outerHTML), remove (true), clone (newId), moveTo (targetId) + optional position."New value: +"For patch: list of surgical ops by data-id. Each op has `id` plus one of: style (object), content (string), attr (object), insert (html) + optional position, replace (outerHTML), remove (true), clone (newId), moveTo (targetId) + optional position. To exclude one intentional non-interactive leaf decoration with no child elements or text from layout validation, patch that existing element with attr: {\"data-maket-layout\":\"ignore\"}; controls, links, data-maket-bind and focusable/ARIA elements are ineligible. This override is rejected in set/insert/replace/content HTML, and its enabling op must be the only op in the patch request."
    • Changedmaket_learn1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "overview",
        -  "workflow",
        -  "html",
        -  "chartes",
        -  "collections",
        -  "review",
        -  "install",
        -  "gemini"
        -]New value: +[
        +  "overview",
        +  "workflow",
        +  "html",
        +  "chartes",
        +  "collections",
        +  "state",
        +  "review",
        +  "install",
        +  "gemini"
        +]
    • Addedmaket_state
  3. 2 tool updatesv1.4.5
    • Changedmaket_collection2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "list",
        -  "view",
        -  "create",
        -  "validate_schema",
        -  "change_schema",
        -  "add_row",
        -  "update_row",
        -  "delete_row",
        -  "delete",
        -  "bind",
        -  "unbind"
        -]New value: +[
        +  "list",
        +  "view",
        +  "create",
        +  "validate_schema",
        +  "change_schema",
        +  "add_row",
        +  "update_row",
        +  "delete_row",
        +  "delete",
        +  "bind",
        +  "unbind",
        +  "cursor"
        +]
      • addedInput schema / properties / mode
        Added value: +{
        +  "enum": [
        +    "template",
        +    "rendered",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Changedmaket_pdf1 field changed
      • addedInput schema / properties / rows
        Added value: +{
        +  "description": "For pages bound to a collection: preview (default) follows each page's cursor — what the live canvas shows; current = the cursor's row only; all = one page per row (mail merge); template = raw placeholders.",
        +  "enum": [
        +    "preview",
        +    "current",
        +    "all",
        +    "template"
        +  ],
        +  "type": "string"
        +}
  4. 13 tool updatesv0.1.0
    • First observedmaket_canvas
    • First observedmaket_charte
    • First observedmaket_collection
    • First observedmaket_doc
    • First observedmaket_gmail
    • First observedmaket_html
    • First observedmaket_image
    • First observedmaket_learn
    • First observedmaket_mermaid
    • First observedmaket_page
    • First observedmaket_pdf
    • First observedmaket_preview
    • First observedmaket_workspace

TDQS

A4.6/5.0
Disambiguation5/5

Each tool addresses a distinct domain (state, diagrams, images, brand guides, collections, learning, page structure, document lifecycle, canvas, HTML, workspace, preview, PDF, Gmail), and descriptions explicitly specify when to use each. No two tools have overlapping responsibilities, so an agent can easily select the correct one.

Naming Consistency5/5

All tools follow a consistent `maket_<domain>` naming pattern, with actions inside each tool using clear verbs (init, get, update, list, etc.). This makes the tool surface highly predictable and reduces cognitive load.

Tool Count5/5

With 14 tools, the set is well-scoped within the ideal 3–15 range. Each tool has a clear purpose and earns its place, providing comprehensive coverage without unnecessary bloat.

Completeness5/5

The tool set covers the full document lifecycle: document CRUD, page structure, HTML editing, state management, collections, assets, chartes, preview/export, and even Gmail integration. The described workflows leave no dead ends; minor gaps like state deletion are handled by restore/overwrite, and export/import cover portability.

Maintenance

ActivityNo data
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Design contract layer for AI agents. Scans Figma, code, Storybook, and token files, reconciles conflicts, and serves a single machine-readable source of truth so every agent gets the same authoritative design rules before it builds. Local-first.
    6
    1,205
    19
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to inspect, modify, export, and validate design documents with 47 tools covering design, code generation, branding, and print/mockup workflows.
    6
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables personalized cold email outreach through research, drafting, template management, and deliverability checks, all locally with no required API keys.
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Let your AI assistant design beautiful emails & layouts — in your Temway workspace. It turns Claude, ChatGPT, Cursor and friends into a visual email & layout authoring studio.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ng-galien/maket'

If you have feedback or need assistance with the MCP directory API, please join our Discord server