Maket
Maket turns an AI assistant into a visual designer, enabling it to create, edit, and export HTML/CSS design documents (posters, flyers, labels, etc.) with brand consistency, image libraries, and data-driven templating.
Core Capabilities:
Document Management — Create, list, delete, duplicate, rename, and import/export portable
.maketbundles.Page Structure — Add, remove, rename, and reorder pages within a document.
Canvas Setup — Configure paper/screen format (A2–A8, DESKTOP/TABLET/MOBILE), orientation, background color, and print margins.
HTML/CSS Editing — Write or patch page HTML, read current content, and check for layout overflow/overlap issues.
Brand Chartes — Define and manage brand style guides (colors, fonts, spacing) enforced as CSS variables across all pages.
Data Collections — Create typed data collections with JSON Schema, manage rows, and render one page variant per data row using
{{ field_name }}placeholders.Image Library — Import, list, annotate, and delete assets; supports URL download, local copy, and auto-optimization.
Mermaid Diagrams — Render Mermaid syntax (flowcharts, sequence, ER, etc.) to SVG and inject into pages.
Live Preview — Open a live browser preview or snapshot a page to PNG via headless Chromium.
PDF Export — Export documents to print-ready PDF at screen (96 DPI), print (150 DPI), or HD (300 DPI) quality.
Gmail Integration — Connect via OAuth, search/read inbox, download attachments into the asset library, and create Gmail drafts from documents (never sends automatically).
Workspace Session — Focus the preview on a specific doc/page, inspect document state, and manage annotations.
Agent Onboarding — Provide AI agents with operational guidance on Maket's workflow, composition rules, and review loops.
Allows creating Gmail drafts from document pages, searching and reading messages, and fetching attachments. Supports OAuth authentication and draft-only or read access.
Adds diagrams (flowcharts, sequence, class, ER, state, XY charts) to document pages using Mermaid syntax, rendered as SVG with customizable themes and colors.
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.
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 |
|
macOS Intel |
|
Windows x64 |
|
Linux x64 |
|
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.pdfData-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 — | Native window, embedded server, agent setup on first launch |
Windows x64 | Maket App — | Same |
Linux x64 | Maket App — | 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 Silicon —
Maket-macOS-arm64.dmgmacOS Intel —
Maket-macOS-x64.dmgWindows x64 —
Maket-Windows-x64-Setup.exeLinux x64 —
Maket-Linux-x64.deborMaket-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 openThe 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 devStarts 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.mcpbDrag 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, versionTools
Maket exposes 14 compound MCP tools. Each one dispatches multiple actions:
Tool | What it does |
| Document lifecycle — new, list, delete, duplicate, rename, meta, export/import |
| Agent onboarding — workflow, HTML composition, chartes, collections, review, install |
| Session actions — focus, state, lock, list_messages, ack_messages |
| Page structure — add, remove, rename, reorder, list |
| Canvas setup — format, orientation, background, per-side print margins |
| Page content — |
| Brand chartes — list, view, set, delete |
| Typed data collections — list, view, create, validate/change schema, add/update/delete rows, bind/unbind a page |
| Document-owned state — initialize, get, update or JSON Patch, validate/change schema, inspect history and revisions, restore |
| Asset library — list, view, meta, import, delete |
| Open the live preview URL or snapshot a page to PNG |
| Render a Mermaid diagram to SVG and inject it |
| Export a document to PDF via headless Chromium |
| 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 withmaket_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 viamaket_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 |
|
| HTTP server port |
|
| User data directory |
|
| SQLite path |
| — | 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 overBootstrap 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=3335Creates .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 # vitestPre-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:
Fork the repo and create a feature branch.
Run
npm install && npm run devto set up your environment.Make your changes; keep them scoped (a bug fix doesn't need surrounding cleanup).
Run
npm run quality— it must pass.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 toolsmaket_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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | Document name. | |
| format | No | Paper (A2–A8, mm) or screen (DESKTOP/TABLET/MOBILE, mm-equivalent). Unspecified keeps the current value. | |
| margins | No | Per-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. | |
| background | No | CSS background colour. Unspecified keeps the current value. Prefer var(--charte-color-bg) when a charte is loaded. | |
| orientation | No | Page orientation. Unspecified keeps the current value. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Required for view/set/delete. Unique charte name. | |
| rules | No | For set: composition rules (titles, photos, layout). Extra keys allowed. | |
| voice | No | For set: voice guidelines (personality, formality, do/dont, vocabulary, examples). | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| tokens | No | For set: design tokens grouped by category. Become CSS variables --charte-<group>-<key>. Example: {"color": {"primary": "#2563EB"}, "font": {"heading": "Montserrat"}, "spacing": {"page": "20mm"}}. | |
| description | No | For set: one-line human description. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | ||
| row | No | ||
| data | No | ||
| mode | No | ||
| name | No | ||
| page | No | ||
| action | Yes | ||
| schema | No | ||
| description | No |
TDQS
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.
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.
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.
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.
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.
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 doc → name (format variants, A/B copies).
rename — rename doc → name.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | The 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. | |
| docs | No | For export: list of doc names to include in the bundle. Omit to export all documents. Ignored by other actions. | |
| name | No | The new name. Only used by duplicate (clone's name) and rename (new name). | |
| input | No | For import: absolute or EXPORTS_DIR-relative path to a .maket file to load. | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| charte | No | For new/meta: name of an existing charte to associate with this document. The charte itself is applied later via maket_charte view. | |
| format | No | For new: paper/screen format. Default A3. Paper sizes are mm; DESKTOP/TABLET/MOBILE are screen aspect ratios scaled to mm. | |
| output | No | For export: output filename (defaults to <doc>.maket or maket-bundle.maket). Absolute paths are honoured; bare names land in EXPORTS_DIR. | |
| rating | No | For meta: 0–5 star rating (clamped). | |
| margins | No | For new: per-side safe-zone insets in mm {top, right, bottom, left}. Optional. | |
| category | No | For new/meta: category path separated by / (for example clients/acme). Flat values remain valid roots; default general. | |
| teamNotes | No | For meta: team-facing notes (visible in the UI). | |
| background | No | For new: canvas background colour (CSS). Default #ffffff. | |
| designNotes | No | For meta: designer-facing notes (visible in the UI). | |
| orientation | No | For new: page orientation. Default portrait. | |
| include_assets | No | For 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | For draft: cc. Falls back to doc.meta.emailCc. | |
| id | No | For read: Gmail message id (from search results). | |
| to | No | For draft: recipient. Falls back to doc.meta.emailTo when omitted. | |
| bcc | No | For draft: bcc. Falls back to doc.meta.emailBcc. | |
| doc | No | For draft: Maket document to use as the email body. | |
| page | No | For draft: 1-based page number within the document. | |
| query | No | For search: Gmail query (same syntax as the UI: from:, subject:, after:, etc.). | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| quality | No | For draft: PDF quality preset for attachments. Default screen (smaller). | |
| subject | No | For draft: subject. Falls back to doc.meta.emailSubject. | |
| category | No | For fetch_attachment (image branch only): category tag saved with the asset row. Default email-attachment. | |
| filename | No | For fetch_attachment: override the saved filename. Defaults to the name reported by Gmail. | |
| overwrite | No | For fetch_attachment: replace an existing file (asset or non-image drop) when set. Default false. | |
| with_read | No | For connect: also request read access (inbox search + message read). Default false — Maket only creates drafts. | |
| maxResults | No | For search: cap on results. Default 10, max 50. | |
| attachments | No | For draft: names of other Maket docs to attach as PDFs. Falls back to doc.meta.emailAttachments. | |
| attachmentId | No | For fetch_attachment: Gmail attachment id from a previous action=read call. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | For get: data-id of a single element to return; omit to fetch the whole page. | |
| doc | Yes | Document name (always required). | |
| ops | No | 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. | |
| html | No | For 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>. | |
| page | Yes | Page number, 1-based (always required). | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| format | No | For get: 'html' (default, full markup) or 'text' (tags stripped). | |
| context_token | No | For set: charte context token from maket_charte view. REQUIRED when the document has a charte — proof the brand guidelines were read first. |
TDQS
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.
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.
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.
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.
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.
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). view → meta 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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | For import: HTTP(S) URL to download from. | |
| path | No | For import: local filesystem path to copy from. | |
| tags | No | For meta/import: searchable tags. | |
| title | No | For meta/import: human title. | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| credit | No | For meta/import: attribution / photographer credit. | |
| category | No | For list: filter to this category. For meta/import: category tag. | |
| filename | No | Asset filename. Required for view/meta/delete. For import: destination filename (required in register-mode, derived from url/path otherwise). | |
| overwrite | No | For import: overwrite an existing file with the same name. | |
| description | No | For meta/import: long prose. | |
| orientation | No | For meta/import: orientation hint (landscape/portrait/square). | |
| context_token | No | For meta (REQUIRED): token returned by the matching view call. Proves the image was read before its metadata is written. |
TDQS
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.
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.
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.
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.
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.
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=.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Required for action=topic. | |
| action | No | Default: overview. | |
| audience | No | Default: agent. |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| bg | No | Background color (hex). Overrides theme bg. | |
| fg | No | Text/foreground color (hex). Overrides theme fg. | |
| doc | Yes | Document name | |
| code | Yes | Mermaid diagram syntax. Header on its own line, then statements. E.g. "graph TD\n A-->B\n B-->C". | |
| line | No | Line/connection color (hex). Overrides theme line. | |
| page | Yes | Page number (1-based) | |
| theme | No | Built-in theme name. Can be combined with custom color overrides. | |
| width | No | CSS width for the wrapper (e.g. "180mm", "100%"). Default: auto. | |
| accent | No | Arrow/accent color (hex). Overrides theme accent. | |
| dataId | No | data-id for the wrapper element. Default: auto-generated (mermaid-1, mermaid-2...) | |
| height | No | CSS height for the wrapper (e.g. "120mm"). Default: auto. | |
| position | No | Where to insert relative to target. Default: beforeend. | |
| targetId | No | data-id of parent element to insert into. Default: page root. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | For reorder: target 1-based position. | |
| doc | Yes | Document name (always required). | |
| from | No | For reorder: source 1-based position. | |
| html | No | For add: HTML body for the new page. Relative image src values are normalized to /assets/... | |
| name | No | For add/rename: page name (new page name, or rename target). | |
| page | No | For remove/rename: target page — either 1-based index or page name. | |
| action | Yes | Operation to run. See the tool description for the action table. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | Document name. | |
| rows | No | 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. | |
| quality | No | DPI preset: screen=96, print=150 (default), hd=300. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | Document name. Required for snapshot. | |
| page | No | 1-based page number. Required for snapshot. | |
| path | No | For snapshot: output PNG path. Defaults to EXPORTS_DIR/<doc>.png. | |
| action | Yes | Operation to run. See the tool description for the action table. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | Target document name. | |
| data | No | Complete state object required by init/update; optional compatible data for schema validation/change. | |
| patch | No | RFC 6902 operations required by action=patch. | |
| action | Yes | Document-state operation to perform. | |
| schema | No | JSON Schema required by init, validate_schema, and change_schema. | |
| revision | No | Historical revision required by revision and restore. | |
| expected_revision | No | Current revision required by update, patch, change_schema, and restore; not used by init. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | The 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. | |
| ids | No | For ack_messages: message ids to mark processed. | |
| page | No | For focus: 1-based page number to make active. | |
| action | Yes | Operation to run. See the tool description for the action table. | |
| locked | No | For lock: true to lock the document, false to unlock. Omit to toggle. |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v1.7.0- Changed
maket_canvas1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_charte1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_collection1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_doc2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / category / descriptionPrevious 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."
- Changed
maket_gmail1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_html1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_image1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_learn1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_mermaid1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_pdf1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_preview1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_state1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maket_workspace1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
3 tool updates
v1.5.0- Changed
maket_html1 field changed- changed
Input schema / properties / ops / descriptionPrevious 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."
- Changed
maket_learn1 field changed- changed
Input schema / properties / topic / enumPrevious value: -[ - "overview", - "workflow", - "html", - "chartes", - "collections", - "review", - "install", - "gemini" -]New value: +[ + "overview", + "workflow", + "html", + "chartes", + "collections", + "state", + "review", + "install", + "gemini" +]
- Added
maket_state
2 tool updates
v1.4.5- Changed
maket_collection2 fields changed- changed
Input schema / properties / action / enumPrevious 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" +] - added
Input schema / properties / modeAdded value: +{ + "enum": [ + "template", + "rendered", + "all" + ], + "type": "string" +}
- Changed
maket_pdf1 field changed- added
Input schema / properties / rowsAdded 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" +}
13 tool updates
v0.1.0- First observed
maket_canvas - First observed
maket_charte - First observed
maket_collection - First observed
maket_doc - First observed
maket_gmail - First observed
maket_html - First observed
maket_image - First observed
maket_learn - First observed
maket_mermaid - First observed
maket_page - First observed
maket_pdf - First observed
maket_preview - First observed
maket_workspace
TDQS
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.
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.
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.
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
Related MCP Connectors
Visual email & layout builder that turns AI assistants into a Temway authoring studio.
Intelligent product canvas: iterate on your product's design with your coding agent, synced to code.
Agent-native marketing email: draft, edit, screenshot, and send from your verified domain.
Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.
Related MCP Servers
- AlicenseAqualityAmaintenanceDesign 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.61,20519Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect, modify, export, and validate design documents with 47 tools covering design, code generation, branding, and print/mockup workflows.61MIT
- AlicenseNot gradedqualityBmaintenanceEnables personalized cold email outreach through research, drafting, template management, and deliverability checks, all locally with no required API keys.4MIT

Temway MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceLet 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.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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