Skip to main content
Glama

ZeroWidth Napkin

Server Details

Draw boards, write docs and sheets, and build decks with your brand in Napkin.

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

TDQS

A3.6/5.0

Scored across 59 tools

Disambiguation4/5

Most tools separate cleanly by resource and action (docs vs boards vs decks vs diagrams vs sheets vs interfaces), and descriptions actively flag boundaries. A few near-neighbors cause mild confusion: napkin_deck_write vs napkin_deck_compose vs napkin_slide_add/fill, and napkin_brand_view vs napkin_brand_examples vs napkin_brand_get. These are explained in the text, so misselection is unlikely but possible.

Naming Consistency3/5

The large napkin_ family is consistently noun_verb (napkin_docs_get, napkin_sheets_set_cells). But the general tools follow a different, often verb-first convention (get_doc, list_docs, search_docs, search_workspace, comments_create, entity_tags_set), and get_doc/list_docs sit awkwardly beside napkin_docs_get/napkin_docs_list. Readable and groupable, but mixed conventions.

Tool Count2/5

59 tools is very heavy and sits in the extreme band of the rubric. The scope is genuinely broad (boards, decks, docs, diagrams, sheets, interfaces, brand kits, comments, tags, search), so each family is defensible, but the aggregate is far beyond what an agent can hold cleanly.

Completeness4/5

Lifecycle coverage is strong: every artifact family has create/list/get/update, plus archiving, rendering (view), and publishing/export where relevant. Minor gaps: no explicit delete (archive substitutes), no workspace-member list despite comments_create referencing member ids, and no files-listing tool.

Available Tools

59 tools
comments_createComment on an entityAInspect

Posts a comment on a workspace entity — a new thread, or a reply when rootId is given. Use it to leave findings where the discussion already lives (an eval result on the flow being debated, a summary on a long thread). Mention people via mentionedUserIds (from workspace member ids) to ring their notification bell; never mention someone who didn't ask to be pulled in.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
rootIdNoReply into this thread; omit to start a new one.
entityIdYes
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNo
entityKindYesWhat the thread hangs on.
mentionedUserIdsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write/safety profile is covered. The description adds value beyond that by disclosing a side effect annotations cannot express: mentioning users rings their notification bell, with an accompanying social caution. It omits permission/auth requirements for posting.

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

Conciseness4/5

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

Front-loads the core action and its two modes, then layers usage and mention etiquette compactly. Two sentences, minimal waste, though the trailing 'never mention someone who didn't ask' is advisory padding rather than invocation-critical information.

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

Completeness3/5

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

For a 7-parameter mutation with 43% schema coverage and no output schema, the description covers the social/mention dimension well but leaves the entity-targeting parameters and the undocumented approvalId unexplained, which an agent would need to call this reliably in all cases.

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

Parameters3/5

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

Schema coverage is only 43%, so the description must compensate, and it partially does: rootId (reply target), mentionedUserIds (workspace member ids, notification behavior), and body are implied. However entityKind's 17-value enum, entityId, and especially approvalId are unexplained in both schema and description, leaving real gaps.

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

Purpose4/5

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

States a precise verb and resource ('Posts a comment on a workspace entity') and distinguishes the two modes of operation: new thread vs. reply when rootId is given. It never names its closest siblings (comments_list, comments_resolve), so it stops just short of a 5.

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

Usage Guidelines4/5

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

Gives concrete usage context ('leave findings where the discussion already lives') with two illustrative scenarios (eval result on a debated flow, summary on a long thread). It does not state when not to use it or point to a sibling alternative, so it lacks the explicit routing of a 5.

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

comments_listRead an entity's comment threadsA
Read-only
Inspect

Lists the comment threads on one workspace entity (open first, then resolved) with authors and timestamps. Read this before weighing in on contested work — the threads are where disagreement lives before it becomes a decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYes
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
entityKindYesWhat the thread hangs on.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: threads are returned open-before-resolved and include authors and timestamps, which shapes how an agent interprets output. It stops short of pagination or volume limits.

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

Conciseness4/5

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

Two sentences with the key facts front-loaded and no redundancy. The second sentence is motivational framing that carries mild value but is slightly softer than a hard routing rule.

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

Completeness4/5

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

For a read-only list tool with no output schema and a mostly documented schema, the description covers ordering, content, and the entity scoping needed to call it. Pagination/result-size behavior is the only notable gap.

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

Parameters3/5

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

Schema coverage is 67%, and the schema itself handles the workspace slug nuances and the enum list. The description only says 'one workspace entity', adding little beyond the structured fields, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (lists) and resource (comment threads on one workspace entity), plus the ordering rule (open first, then resolved) and payload (authors, timestamps). This clearly separates it from comments_create and comments_resolve, which mutate rather than read.

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

Usage Guidelines3/5

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

The second sentence gives a soft situational cue ('read this before weighing in on contested work'), which implies when the tool is useful. However it names no alternatives and gives no explicit when-not or prerequisite guidance, so usage remains inferred rather than stated.

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

comments_resolveResolve or reopen a threadA
Destructive
Inspect

Sets a comment thread's resolved state (rootId = the thread's root comment id). Resolve ONLY when the human asked or the thread's question is demonstrably settled — and say what settled it in a reply first. Reopening is for new evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootIdYes
resolvedYes
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the mutation/safety profile is covered. The description adds real behavioral context beyond that: the precondition (a reply explaining what settled the thread) and the reopen semantics. It doesn't clarify reversibility or how the state change affects existing replies, keeping it below 5.

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

Conciseness5/5

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

Two tight sentences with no filler; the action and the primary precondition are front-loaded before the reopening clause. Every clause carries decision-relevant information.

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

Completeness4/5

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

For a small toggle tool with no output schema, the description covers the action, the target, and the conditions well. It leaves approvalId and workspace behavior unexplained, which matters for a destructive write, but overall an agent has enough to act correctly.

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

Parameters3/5

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

Schema coverage is only 25%, and the description compensates for rootId only (root comment id). 'resolved' is implied by resolve/reopen framing, but 'workspace' is documented only in the schema and 'approvalId' is explained nowhere — a notable gap for a mutation tool with an approval parameter.

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

Purpose5/5

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

States a specific verb (sets resolved state) plus resource (comment thread), and covers both directions — resolve and reopen. The parenthetical 'rootId = the thread's root comment id' disambiguates the target, making it clearly distinct from comments_create/comments_list.

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

Usage Guidelines5/5

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

Explicitly gates the action: resolve ONLY when the human asked or the question is demonstrably settled, and reply first explaining what settled it; reopen is for new evidence. This is genuine when/when-not guidance with a required prior step.

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

entity_tags_browseBrowse the workspace's tagsA
Read-only
Inspect

Without a tag: every tag in use across the workspace with how many entities carry it, most-used first — the vocabulary the team already organizes by. With a tag: everything filed under it across every tool, each with its kind, id, title, and path. Use it to reuse existing labels instead of inventing near-duplicates, and to answer 'show me everything about X' when X is a label.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoA tag to expand into its items. Omit to list tags.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive/openWorld, so safety is covered, and the description adds real behavioral detail: result ordering (most-used first), entity counts per tag, and the per-item fields returned in tag mode (kind, id, title, path). No pagination or size-limit behavior is mentioned, keeping this from a 5.

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

Conciseness5/5

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

Front-loaded and cleanly parallel: 'Without a tag:' then 'With a tag:' then the usage clause. Every sentence carries distinct information with no filler.

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

Completeness5/5

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

With no output schema, the description correctly carries the return-value burden for both modes, and annotations cover the safety profile while the schema covers both parameters. Nothing an agent needs to select or call this tool is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by characterizing what each mode of the tag parameter actually returns, turning a bare 'omit to list tags' into the two distinct result shapes. The workspace parameter semantics remain entirely schema-borne.

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

Purpose5/5

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

States a specific dual operation (list every tag in the workspace, or expand one tag into all entities filed under it) with the exact resource and scope. It is immediately distinguishable from the write-oriented siblings entity_tags_get and entity_tags_set because the browse mode and cross-tool aggregation are spelled out.

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

Usage Guidelines4/5

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

Gives concrete when-to-use guidance: reuse existing labels rather than inventing near-duplicates, and answer 'show me everything about X' when X is a label. It stops short of naming sibling alternatives or stating when-not-to-use (e.g. versus search_workspace), so it is clear context without explicit exclusions.

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

entity_tags_getRead the tags on entitiesA
Read-only
Inspect

Returns the tags on a batch of entities of one kind — the labels galleries organize by. Ids come from the kind's list/get tool or from search_workspace. Use it before entity_tags_set so you replace the full set knowingly, and to answer 'what is this filed under'. Entities the user can't see are omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
entityKindYesWhich kind the ids belong to.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds the non-obvious behavioral fact that 'Entities the user can't see are omitted,' i.e. results are permission-filtered rather than erroring. It does not mention limits (e.g. the 100-id cap or ordering), but the value-add beyond annotations is genuine.

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

Conciseness5/5

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

Three sentences, all front-loaded: what it returns first, then usage, then the permission caveat. No filler and each sentence carries distinct information.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does state what comes back (tags) and the omission behavior. It leaves minor gaps — tag value format, ordering, and whether unknown ids are silently dropped or error — but nothing that blocks correct invocation.

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

Parameters4/5

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

Schema coverage is 67%, so the schema documents most params, but the description adds real provenance for the hardest parameter: ids 'come from the kind's list/get tool or from search_workspace.' That tells an agent where to obtain valid ids, which the bare array schema does not.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Returns the tags on a batch of entities of one kind.' The parenthetical 'the labels galleries organize by' distinguishes tags from other entity metadata, and the named siblings (entity_tags_set, search_workspace) make the boundary clear.

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

Usage Guidelines4/5

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

Gives explicit usage contexts: 'Use it before entity_tags_set so you replace the full set knowingly, and to answer what is this filed under.' That is a real when-to-use plus a stated alternative. It does not mention entity_tags_browse, the other obvious read-side sibling, so it falls short of fully disambiguating the read alternatives.

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

entity_tags_setSet an entity's tagsA
Destructive
Inspect

Replaces the FULL tag set on one entity (an empty list clears it). Read the current tags with entity_tags_get first and pass the merged list — this is not additive. Tags are lowercase letters, numbers, spaces, and hyphens; prefer labels already in use (entity_tags_browse) so the workspace's vocabulary stays small. The id comes from the kind's list/get tool or search_workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYes
entityIdYes
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.
entityKindYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description reinforces this with the replace-not-merge semantics and the empty-list-clears behavior. It does not mention the needs_confirmation/approvalId retry flow that the schema implies, which is the one notable behavioral gap.

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

Conciseness4/5

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

Three dense sentences, all front-loaded with the destructive replace semantics first, followed by workflow and vocabulary guidance. Every sentence earns its place; the parentheticals make it slightly busy but not wasteful.

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

Completeness4/5

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

No output schema exists, and the description covers destructive semantics, prerequisites, id sourcing, and tag format well enough to invoke the tool correctly. The confirmation/approval retry path is left to the schema field description rather than the tool description.

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

Parameters4/5

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

Schema coverage is only 40%, and the description compensates by documenting the tag character set (lowercase letters, numbers, spaces, hyphens), the merge requirement for the tags array, and the origin of entityId. The workspace and approvalId parameters are only explained in the schema, so coverage is good but not complete.

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

Purpose5/5

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

States a specific verb and resource ('Replaces the FULL tag set on one entity') and immediately clarifies the destructive scope with '(an empty list clears it)'. This cleanly separates it from the sibling readers entity_tags_get and entity_tags_browse.

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

Usage Guidelines5/5

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

Gives explicit workflow: read current tags with entity_tags_get first, pass the merged list, and warns 'this is not additive'. Also routes to entity_tags_browse for vocabulary reuse and names where the entityId comes from (kind's list/get tool or search_workspace), so the agent knows both prerequisites and alternatives.

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

get_docFetch ZeroWidth doc by slugA
Read-only
Inspect

Fetch the full Markdown body of a specific docs page by its slug. Use this after search_docs when the user needs the complete content of a page. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPage slug. Accepts 'compass/api', '/compass/api', or 'docs/compass/api'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, covering the safety profile. The description adds valuable context by stating 'No authentication required' and specifying the return body as full Markdown, which agents need to know beyond the structured hints.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core purpose ('Fetch the full Markdown body...'), followed by usage routing and a salient behavioral note. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a simple one-parameter read tool with full schema coverage and annotations covering safety, the description is complete: it states the return format, the required input type, usage context, and authentication status. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the single `slug` parameter is fully documented in the schema with accepted formats. The description adds no syntax or format details beyond what the schema provides, so it meets the baseline rather than exceeding it.

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

Purpose5/5

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

States a specific verb ('Fetch'), resource ('full Markdown body of a specific docs page'), and retrieval key ('by its slug'). It distinguishes itself from the search-oriented sibling by positioning as the step after `search_docs` for complete page content.

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

Usage Guidelines4/5

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

Explicitly says to use this after `search_docs` when the user needs the complete content of a page, which names the alternative and the condition that selects it. It does not state when not to use it (e.g., for listing or metadata), but the context is clear enough for a simple read tool.

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

list_docsList ZeroWidth docs pagesA
Read-only
Inspect

Enumerate all available docs pages, optionally filtered by product (e.g. 'compass', 'legal', 'overview'). Use this to discover what slugs exist before calling get_doc. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
productNoOptional product slug filter (e.g. 'compass', 'legal', 'overview').

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds context beyond them with 'No authentication required,' a genuinely useful operational fact for callers, though it says nothing about pagination or result size for a full enumeration.

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

Conciseness5/5

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

Three tight sentences with purpose, routing guidance, and the auth fact front-loaded in order of importance. No filler or repetition of the title.

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

Completeness4/5

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

For a read-only, single-optional-param listing tool whose annotations cover safety, the description is nearly sufficient. Without an output schema it could note the return shape (e.g. that results are slugs/pages), but the 'slugs' reference largely covers that, so only a small gap remains.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents the single 'product' parameter. The description's example values ('compass', 'legal', 'overview') duplicate the schema description verbatim, adding no meaning beyond it. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb ('Enumerate') and resource ('all available docs pages') with scope, plus the optional product filter. It names the sibling get_doc and frames itself as the discovery step before retrieval, letting an agent distinguish it from single-doc fetch without opening either schema.

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

Usage Guidelines4/5

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

Explicitly states when to use it: 'to discover what slugs exist before calling get_doc,' giving a clear dependency flow and naming the alternative. It does not address when NOT to use it or whether search_docs is a better discovery path, leaving a minor gap.

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

napkin_boards_createCreate a Napkin boardAInspect

Creates a blank Napkin board — a sketch (free canvas) or a deck (slides). NOT for written documents: 'draft/write a doc, note, memo' is napkin_docs_create. Use when the user asks for one, or proactively when a sketch/deck would carry the conversation better than words; hand it over with [[board:ID]] alone on its own line. For a deck with content, prefer napkin_deck_write (one call, whole deck).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefaults to "sketch".
nameYesBoard name.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare it is a write (readOnlyHint=false) but non-destructive and not open-world, so the safety profile is covered. The description adds real context beyond that: the created board is blank, the handover syntax is `[[board:ID]]` on its own line, and it warns that napkin_deck_write is preferable when content already exists. It does not discuss permissions or workspace-token behavior, which the schema covers instead.

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

Conciseness5/5

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

Three sentences, each carrying a distinct load: what it makes, what it is not for, and how/when to use it. The exclusion and the primary trigger are front-loaded, and the handover format is given inline rather than left to a later sentence.

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

Completeness5/5

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

For a low-complexity create tool with full schema coverage and annotations covering the safety profile, the description supplies everything still missing: the emotional/practical trigger for proactive use and the exact syntax for surfacing the new board back to the user. No output schema exists, so return-value detail is not required.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description earns above baseline by explaining what the `kind` enum values actually mean (sketch = free canvas, deck = slides) and by implying the deck case has a better sibling tool, adding semantic meaning beyond the raw enum.

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

Purpose5/5

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

States a specific verb and resource ("Creates a blank Napkin board") and immediately scopes it with the two valid kinds ("sketch (free canvas) or a deck (slides)"). It also names the sibling it is NOT (napkin_docs_create), so an agent can distinguish it without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-not guidance ("NOT for written documents: 'draft/write a doc, note, memo' is napkin_docs_create"), a positive trigger ("Use when the user asks for one"), a proactive condition, and a routing rule to a better alternative for the deck-with-content case ("prefer napkin_deck_write"). Nothing is left to inference.

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

napkin_boards_getRead a Napkin board's shapesA
Read-only
Inspect

Returns a board's shapes as data — each with its id, kind, position, size, and text — so you can TARGET one to change or remove with napkin_draw (updates / deletes take these ids and absolute board coordinates). Pen strokes come back as a point count, not the points. For what the board LOOKS like, use napkin_boards_view instead. Board ids come from napkin_boards_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYesNapkin board id (from napkin_boards_list).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive/closed-world, so the safety profile is covered. The description adds meaningful context beyond structured data: pen strokes return as a point count rather than raw points, and the returned ids/coordinates are the exact inputs napkin_draw expects. Doesn't cover pagination or size limits, so not a 5.

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

Conciseness5/5

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

Front-loaded with the primary return behavior, then constraints, then alternatives. Every sentence carries distinct information with no redundancy, and emphasis (TARGET, LOOKS) aids scanning.

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

Completeness5/5

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

For a read-only board-fetch tool with annotations covering safety and no output schema, the description supplies the return shape, the downstream integration path, the pen-stroke caveat, the id source, and the sibling alternative. An agent has everything needed 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.

Parameters3/5

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

Schema coverage is 100%, so boardId and workspace are already documented by the schema (including sourcing for boardId). The description reinforces that board ids come from napkin_boards_list but adds no format or syntax detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Returns a board's shapes as data') and enumerates the returned fields (id, kind, position, size, text). It explicitly distinguishes itself from napkin_boards_view ('what the board LOOKS like') and connects to napkin_draw, so an agent can tell it apart from siblings.

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

Usage Guidelines5/5

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

Explicitly states the use case (to TARGET a shape to change or remove via napkin_draw updates/deletes) and names the alternative tool with its distinct condition (napkin_boards_view for visual appearance). It also notes the id source (napkin_boards_list), leaving nothing to inference.

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

napkin_boards_listList Napkin sketchesA
Read-only
Inspect

Lists sketch boards in the active workspace — name, id, kind (sketch / deck), shape count, last activity. Boards are SPATIAL canvases (drawing, diagrams); the markdown DOCUMENTS are docs — napkin_docs_list. Archived boards are hidden unless includeArchived; q narrows by name. When the user mentions a sketch, drawing, whiteboard, or napkin, find it here, then LOOK at it with napkin_boards_view before discussing its contents. When referring the user to a sketch in your reply, put [[board:ID]] alone on its own line — it renders as a clickable card with a live thumbnail.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoName contains (case-insensitive).
kindNoOnly sketches or only decks.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
includeArchivedNoAlso list archived boards (default false).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly/no-destructive, so safety is covered; the description adds the real behavioral detail that archived boards are hidden by default and that `q` matches on name. It also discloses a display side-effect (the [[board:ID]] card rendering), which goes beyond structured fields, though it doesn't cover pagination or result limits.

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

Conciseness5/5

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

Front-loads the core purpose, then layers routing, filtering, follow-up, and formatting guidance with no filler. Each sentence carries a distinct actionable instruction.

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

Completeness5/5

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

For a read-only list tool whose annotations carry the safety profile and whose schema documents all four params, the description supplies the missing pieces: sibling disambiguation, filter defaults, the required follow-up view call, and reply formatting. Nothing an agent needs to call it correctly is absent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds meaning by stating the default visibility rule for archived boards and the name-matching semantics of `q`. It does not elaborate on the workspace parameter beyond what the schema says.

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

Purpose5/5

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

States a specific verb+resource ('Lists sketch boards') and enumerates the returned fields (name, id, kind, shape count, last activity). It explicitly distinguishes itself from the sibling napkin_docs_list by contrasting spatial canvases (boards) with markdown documents (docs).

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

Usage Guidelines5/5

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

Gives concrete trigger phrases ('sketch, drawing, whiteboard, or napkin') and an explicit alternative ('the markdown DOCUMENTS are docs — napkin_docs_list'). It also prescribes the follow-up flow: find it here, then LOOK at it with napkin_boards_view before discussing contents.

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

napkin_boards_updateRename, describe, archive, or share a Napkin boardA
Destructive
Inspect

Edits a board's details: name, description, visibility, or archived (true takes it out of the gallery; false brings it back — the recovery move for a board you created by mistake or the user no longer wants). Board ids come from napkin_boards_list. Boards are working material: no approval card, every change attributed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
boardIdYesNapkin board id (from napkin_boards_list).
archivedNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
visibilityNoWho can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE.
descriptionNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation safety profile is covered. The description adds genuinely new context: exact archived semantics (true removes from gallery, false restores it) and the operational note that boards skip approval and every change is attributed, which is useful audit behavior.

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

Conciseness4/5

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

Front-loads the core action ('Edits a board's details') before parenthetical detail. The archive aside and attribution note each earn their place, though the sentence is somewhat dense with em-dashes and parentheticals.

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

Completeness4/5

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

No output schema exists, but the description covers the archive behavior, attribution, and id sourcing that an agent needs to call this correctly. It does not specify partial-update semantics (whether omitted fields are preserved) or permission requirements, leaving a modest gap.

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

Parameters4/5

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

Schema coverage is only 50%, but the description compensates by explaining the archived flag's two-way behavior and confirming boardId sourcing from napkin_boards_list. The visibility enum and workspace override are already well documented in the schema, so combined coverage is strong; only 'name'/'description' semantics are left implicit.

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

Purpose4/5

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

States a specific verb ('Edits') and resource ('a board's details') and enumerates the mutable fields (name, description, visibility, archived). An agent can distinguish it from napkin_boards_create/get/view by name, though the description never explicitly names a sibling to route against.

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

Usage Guidelines3/5

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

Provides a real when-to-use for the archive path ('the recovery move for a board you created by mistake or the user no longer wants') and points to napkin_boards_list for ids. However, it offers no exclusions, no guidance on when to prefer another sibling, and no prerequisites.

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

napkin_boards_viewView a Napkin sketch (rendered image)A
Read-only
Inspect

Renders the sketch board to an image and returns it so you can SEE what's drawn — layout, arrows, handwriting-style strokes, sticky notes — not just data about it. Use this before answering any question about a sketch's contents, and cite the board when you do — [[board:ID]] alone on its own line embeds the sketch card in your reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYesNapkin board id to render.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond the schema: it renders content to an image, returns that image, and specifies a citation convention for embedding the result. It does not discuss rate limits or permissions, but those are not central for a safe read operation.

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

Conciseness5/5

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

Two sentences, front-loaded with the key behavioral distinction (rendering an image vs. returning data) and then the usage/citation rule. There is no filler, and the format guidance is compact and actionable.

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

Completeness5/5

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

For a read-only view tool with no output schema, the description tells the agent what it receives (a rendered image), when to use it, and how to cite the result. Annotations cover safety, and the schema covers parameters, so nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the description adds no parameter-level detail beyond what the schema already documents for boardId and workspace. With the schema carrying full parameter semantics, a baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (renders) and resource (sketch board) and explains that it returns an image so the agent can SEE the drawing, not just data. It distinguishes itself from data-oriented siblings like napkin_boards_get by saying 'not just data about it.' An agent can tell this tool apart from get/list/update without opening any schema.

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

Usage Guidelines4/5

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

It gives explicit usage guidance: 'Use this before answering any question about a sketch's contents' and instructs the agent to cite the board with a specific embed syntax. It does not name an alternative sibling or state when-not to use it, but the contrast with 'not just data' implicitly routes the agent away from napkin_boards_get.

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

napkin_brand_add_filesAdd pictures to a brand kitAInspect

Adds pictures to a brand kit section — logo versions, product marks, example screenshots, imagery. Each file comes from a public https url (fetched by the server) or, for a small file that isn't online, base64 data with a filename. PNG, JPEG, WebP, GIF and SVG, up to 20 MB each. Every file becomes a workspace file and an asset on the section, appended after the ones already there. Give each a name and a note saying what it's for; on logo sections set backdrop to the hex of the ground it's made for (#ffffff for a dark logo, #000000 for a reversed one), which is how pages pick the right version. Same rule as napkin_brand_draft: you can change any kit except the workspace's brand. Files that fail are reported and the rest still land.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoOnly when no section has that title yet: the kind of section to make.
filesYes
kitIdYesThe kit to add to (napkin_brand_list).
sectionYesTitle of the section to add them to, like Logo, Imagery or Examples.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint false, openWorldHint true, destructiveHint false) by disclosing server-side fetching of URLs, 20 MB per-file cap, append-after-existing ordering, partial-failure semantics ('files that fail are reported and the rest still land'), and the permission rule that any kit is editable except the workspace's brand. That is exactly the operational context an agent needs for a mutating, open-world call.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, then constraints, then the operational caveat. The prose is dense but nearly every sentence carries a rule; the parenthetical hex examples add precision rather than padding.

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

Completeness4/5

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

For a 5-parameter mutation tool with no output schema, the description covers sourcing, size limits, ordering, partial failure, branding permissions, and the logo backdrop convention. It could be tighter on section auto-creation (the `kind` parameter's role), but no output schema is needed since failure reporting is described.

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

Parameters4/5

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

Schema coverage is already 80%, but the description adds real meaning: `url` is fetched by the server, `data` requires `filename`, `backdrop` is the ground color a logo is designed for and is how pages select the right version, and `name`/`note` convey purpose. This exceeds the baseline for well-documented schemas.

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

Purpose5/5

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

States a specific verb and resource — adding pictures to a brand kit section — and enumerates the concrete content types (logo versions, product marks, screenshots, imagery). It clearly distinguishes itself from siblings by referencing napkin_brand_draft and napkin_brand_list, so an agent can route without opening any schema.

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

Usage Guidelines4/5

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

Gives clear context for use: adding files to an existing kit section, with the per-file rules and the backdrop convention called out for the logo case. It names the related sibling napkin_brand_draft for the permission rule but does not explicitly contrast alternatives such as napkin_brand_apply or state when NOT to use this tool.

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

napkin_brand_applyApply the brand to a pieceA
Destructive
Inspect

Restyles a piece in the brand — the workspace's brand unless you name a kit. deck (a board id): every slide gets the brand's background, typefaces, and text colors; sizes are kept. interface (an interface id): rewrites its brand.css, so anything styled with var(--brand-*) updates. accent makes one of the kit's colors the piece's accent — use it when the piece is about one product or campaign that has its own color in the brand (read the kit's Colors section to see which). Docs need nothing — they read the brand when exported. Check a deck afterwards with napkin_slide_view.

ParametersJSON Schema
NameRequiredDescriptionDefault
deckNoBoard id of a deck.
kitIdNoA brand kit id from napkin_brand_list. Omit for the workspace's brand.
accentNoName of one of the kit's colors to use as this piece's accent.
interfaceNoInterface id.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the destructiveHint annotation by describing exactly what mutates (slides get background/typefaces/text colors, interface brand.css is rewritten) and what is preserved ('sizes are kept'), plus the downstream effect on var(--brand-*) styling. This is substantial disclosure of mutation semantics for a destructive tool.

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

Conciseness5/5

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

Front-loads the core action, then spends each following clause on one parameter's distinct effect with no filler. Dense but every sentence carries actionable detail.

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

Completeness4/5

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

For a destructive mutation tool with no output schema, the description covers effects and verification well. It does not, however, clarify that at least one of deck/interface/kitId must be supplied (all params are optional), leaving an ambiguity an agent could trip on.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all five parameters (baseline 3). The description adds real value beyond it by explaining accent's runtime meaning and kitId's default-to-workspace-brand behavior, though it says nothing extra about workspace or interface beyond the schema text.

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

Purpose5/5

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

States a specific verb and resource ('Restyles a piece in the brand') and enumerates the distinct effect per target type (deck, interface, accent, docs). This lets an agent distinguish it from siblings like napkin_deck_set_theme or napkin_brand_get without opening schemas.

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

Usage Guidelines4/5

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

Gives clear conditional guidance for the accent parameter ('use it when the piece is about one product or campaign that has its own color') and explicitly says docs need nothing. It also routes verification to napkin_slide_view, but does not name alternative tools for setting deck styling, so no explicit when-not guidance against siblings.

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

napkin_brand_checkCheck writing against the brandA
Read-only
Inspect

Finds words the brand says to avoid in a piece of writing, with what to say instead and why. Pass text, or a deck (boardId) or doc (docId) to check its words. Run it on your own drafts before handing them back.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoText to check.
docIdNoA doc to check.
kitIdNoA brand kit id from napkin_brand_list. Omit for the workspace's brand.
boardIdNoA deck or sketch to check.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this is a safe read (readOnly=true, destructive=false, openWorld=false), so the safety profile is covered. The description usefully adds that the result includes suggested replacements and the reason, which compensates for the absent output schema. It doesn't disclose limits (e.g., what happens with an invalid boardId or size caps), so not a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core behavior, then inputs, then a usage nudge. No filler or repetition.

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

Completeness4/5

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

For a read-only tool with no output schema, zero required params, and 100% schema coverage, the description covers what the tool returns and how to point it at content. The optional kitId/workspace path and error/edge behavior are left to the schema, which is acceptable but slightly incomplete.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema. The description adds only which inputs are mutually usable (text/boardId/docId) and omits kitId and workspace entirely, so it does not meaningfully exceed the schema baseline.

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

Purpose5/5

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

States a specific verb+resource: it finds brand-discouraged words in writing and returns replacements plus rationale. This is clearly distinct from sibling brand tools like napkin_brand_apply (which applies a brand) and napkin_brand_get/list (which read the kit), so an agent can select it without opening sibling schemas.

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

Usage Guidelines4/5

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

Gives a clear when-to-use ('Run it on your own drafts before handing them back') and enumerates the three input modes (raw text, deck via boardId, doc via docId). It stops short of naming when to prefer a sibling tool or when not to use this one, so it doesn't reach the explicit-alternatives bar of a 5.

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

napkin_brand_draftDraft a brand kitA
Destructive
Inspect

Creates a new brand kit, or edits one that is NOT the workspace's brand. Use it when someone asks you to put their brand together (from their site, a deck, or what they tell you) or to try a variation. You can't change the workspace's brand itself — make a draft and tell the user they can choose it in Napkin's Brand section. A kit is a document of sections, each with title, kind (overview, voice, colors, typography, logo, imagery, motion, layout, examples, custom), markdown body, and rules ({rule, why}); colors sections hold swatches ({name, value: 6-digit hex, note}), typography sections hold faces ({name: what it's for, family: a font name or sans / serif / mono / rounded / marker, note}), voice sections hold use and avoid ({term, instead, why}), and any section can hold assets ({fileId: an image already in the workspace's files, name, note, backdrop: hex}) — logo versions, example images — and links ({url, title, note}). An examples section holds work that gets the brand right: screenshots as assets and pages as links, each with a note on what makes it good. Exact numbers (timings, spacing) go in the section's prose. New kits start with empty standard sections plus the workspace's colors. content.sections upserts by title (or id): fields you pass replace, lists inside replace, sections you don't mention are kept; removeSections drops by title. content.uses says how Napkin uses the brand — color roles (ink, muted, background, surface, accent, accent2) and fonts (heading, body, mono) — by swatch or face NAME. Give every rule a why: the reason is what lets people decide cases the rule doesn't cover.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
kitIdNoKit to edit. Omit to create a new kit.
contentNo
fromKitIdNoNew kits only: start from this kit's values.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
descriptionNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructiveHint=true, readOnlyHint=false, openWorldHint=false; the description goes far beyond by disclosing the merge semantics that make this destructive — 'fields you pass replace, lists inside replace, sections you don't mention are kept', plus removeSections drops by title, and new kits inherit the workspace's colors. This is exactly the kind of behavioral context that prevents accidental data loss.

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

Conciseness4/5

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

Front-loaded with the create/edit decision and the workspace-brand prohibition before the dense content-model exposition, which is the right ordering. The remaining prose is a long em-dash-heavy run of clauses, but nearly every sentence carries information an agent needs to build a valid kit payload, so the length is largely earned.

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

Completeness4/5

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

No output schema exists, so the description must carry the full burden — and it covers the mutation semantics, the content model, the workspace-brand boundary, and the 'give every rule a why' convention. It omits the return shape/identifier of a newly created kit, which is a minor gap for a creation tool whose caller likely needs the new kitId.

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

Parameters4/5

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

With only 50% schema coverage over a deeply nested six-parameter model, the description compensates well: it defines the section content model (title/kind/body/rules/swatches/faces/use/avoid/assets/links/layouts), explains the upsert-by-title behavior of content.sections, and clarifies that content.uses references swatch or face NAMES. It does not document name, description, workspace, or fromKitId directly, but the schema does cover those.

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

Purpose5/5

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

States a specific verb+resource pair ('Creates a new brand kit, or edits one that is NOT the workspace's brand') and immediately scopes it against the workspace brand, which is exactly the confusion an agent would have. An agent can distinguish this from napkin_brand_apply / napkin_brand_get without opening a schema.

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

Usage Guidelines4/5

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

Gives clear triggering contexts ('when someone asks you to put their brand together... or to try a variation') and an explicit prohibition with a workaround ('You can't change the workspace's brand itself — make a draft and tell the user they can choose it'). It stops short of naming sibling tools (napkin_brand_apply, napkin_brand_examples) as alternatives, so it is clear context without explicit routing.

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

napkin_brand_examplesLook at the brand's examplesA
Read-only
Inspect

Shows you the pictures in a kit's Examples sections — screenshots of work that gets the brand right — with each one's note on what makes it good, plus the example links. Look before you design a deck, page or interface in the brand, and hold your work to the same bar: the layouts, density, type sizes and use of color you see there.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitIdNoKit to look at. Omit for the workspace's brand.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so safety is covered. The description adds that it returns pictures, notes, and links, but it does not disclose authorization needs, rate limits, or other behavioral traits beyond the annotation-covered basics. A 3 is appropriate.

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

Conciseness5/5

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

Two sentences, both front-loaded and free of filler; the first explains what is shown and the second explains why to use it. It is appropriately sized for a tool with no output schema.

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

Completeness5/5

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

For a simple read-only viewer with rich annotations and full schema coverage, the description is complete: it explains the return content (pictures, notes, links) and the usage context. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with both kitId and workspace fully documented in the schema. The description adds no parameter-level guidance, so baseline 3.

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

Purpose4/5

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

States a specific verb (shows) and resource (brand kit Examples sections), and clarifies the payload (screenshots, notes, links). It does not explicitly name a sibling or distinguish itself from napkin_brand_view/get, so it lands at 4 rather than 5.

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

Usage Guidelines4/5

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

Gives a clear when-to-use: 'Look before you design a deck, page or interface in the brand.' No when-not or alternative tools are mentioned, so it's a 4.

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

napkin_brand_fontsGet a brand's font filesAInspect

Gets the font files for a kit's typefaces from Google Fonts and keeps them in the kit, so decks, slide pictures and the canvas draw the brand's real typefaces instead of a stand-in. Only typefaces that name a family (like Poppins) and don't have files yet are fetched. Works on any kit, including the workspace's brand: it adds the files for the typefaces the kit already names and changes nothing else. A typeface Google doesn't have is reported back; the user can upload its files in the kit's typography section.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitIdNoKit to fetch fonts for. Omit for the workspace's brand.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A3.7/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: it is idempotent (skips typefaces with existing files or no family), additive-only ('changes nothing else'), reaches an external source (consistent with openWorldHint), and reports back typefaces Google lacks. This clarifies the non-destructive nature and the failure path in ways annotations alone (readOnlyHint=false, destructiveHint=false) do not.

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

Conciseness4/5

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

Four sentences, front-loaded with the core action and benefit, then the fetch condition, scope, and failure handling. No filler, though it is mildly wordy and could tighten the first sentence.

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

Completeness4/5

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

For a mutation tool with no output schema and full schema coverage, the description supplies the missing pieces: what gets added, what is left untouched, idempotency, and the not-found path with an upload remedy. Safety is covered by annotations, so remaining gaps are minor.

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

Parameters3/5

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

Schema description coverage is 100%, so kitId and workspace semantics are already fully documented in the schema. The description restates the kit/workspace scope but adds no format or edge-case detail beyond what the schema provides. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource: fetches a kit's typeface font files from Google Fonts and stores them in the kit. The effect (decks, slides and canvas render the real brand typefaces) makes the purpose concrete. It does not explicitly name the sibling it differs from (e.g. napkin_brand_add_files), though the upload fallback hints at the boundary.

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

Usage Guidelines3/5

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

Implies usage via scope ('Works on any kit, including the workspace's brand') and a fetch condition ('only typefaces that name a family and don't have files yet are fetched'), which tells the agent when the call is a useful/likely no-op. However, it never states when to call this versus napkin_brand_add_files or other brand tools, so selection guidance is inferred rather than explicit.

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

napkin_brand_getRead the brandA
Read-only
Inspect

Reads a brand kit — the workspace's brand unless you name another. READ THIS BEFORE writing or designing anything for the workspace: a deck, a doc, an interface, copy. Returns brief (the whole kit as markdown: every section — overview, voice, colors, typography, imagery, motion, and whatever else the team wrote — with the reason behind each rule; follow the reasons when a case isn't covered), css (the --brand-* variables; interfaces already link it as brand.css, so style with var(--brand-accent) etc. rather than hex values), and tokens (the resolved values Napkin uses). Before any kit exists it returns values from the workspace's colors with kit: null.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitIdNoA brand kit id from napkin_brand_list. Omit for the workspace's brand.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description still adds real value by disclosing the three return fields (brief/css/tokens) and the pre-kit fallback where values come from workspace colors with kit: null. It omits any note on auth scope or rate limits, so it stops short of the top mark.

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

Conciseness5/5

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

The imperative is front-loaded ahead of the return-value detail, and each subsequent clause (css variable usage, fallback behavior) carries operational information rather than filler.

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

Completeness5/5

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

There is no output schema, so the description must carry the return contract and it does: it names brief, css, and tokens, explains their contents and intended use, and covers the no-kit-yet case. Nothing an agent needs to call and consume this tool is missing.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3; the description restates the default-workspace semantics that the schema already carries for kitId and adds no new syntax or format detail for either parameter.

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

Purpose5/5

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

Specific verb (reads) plus resource (brand kit) and an explicit default scope: the workspace's brand unless a kit is named. An agent can distinguish it from napkin_brand_list (which enumerates kits) without opening either schema.

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

Usage Guidelines5/5

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

Gives a direct when-to-use imperative ('READ THIS BEFORE writing or designing anything for the workspace: a deck, a doc, an interface, copy') and points to napkin_brand_list as the source of kitId, so the routing decision against siblings is explicit.

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

napkin_brand_listList brand kitsA
Read-only
Inspect

Lists the workspace's brand kits: id, name, description, and which one is the workspace's brand (isDefault). Most workspaces have one. Use napkin_brand_get to read a kit.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the return shape and the meaning of isDefault as the workspace's brand. No mention of pagination or auth, which is a minor gap for a list operation.

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

Conciseness5/5

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

Two tight sentences with zero waste. The core purpose and returned fields are front-loaded, and the routing hint to napkin_brand_get comes last.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the return fields and explains isDefault, which an agent needs to interpret results. Coverage is complete for a simple list tool, with only pagination/ordering left unspecified.

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

Parameters3/5

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

Schema description coverage is 100%, and the single workspace parameter's default/override/ignored-for-API-key semantics are fully documented in the schema. The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Lists) and resource (the workspace's brand kits), then enumerates the returned fields (id, name, description, isDefault). It explicitly names napkin_brand_get as the reader tool, so an agent can tell the two apart without opening a schema.

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

Usage Guidelines4/5

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

Routes the agent clearly: use this to list, use napkin_brand_get to read a specific kit. Adds prevalence context ('Most workspaces have one'). No explicit when-not guidance, but the alternative is named with its selecting condition.

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

napkin_brand_viewLook at a brand's picturesA
Read-only
Inspect

Look at the pictures in a brand kit — logos, product marks, footage stills, layout references, examples — before you use them. Without section or names it lists every picture by section with its note, so you know what exists. With section (a section title, like Imagery) or names (pictures' names as the brief lists them) it shows you those pictures, up to 8 at a time. Look before you build a design around a picture: whether a photo has room for text, which part of it carries the color, and whether it suits texture inside type are things you can only tell by seeing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
kitIdNoA kit from napkin_brand_list. Omit for the workspace's brand.
namesNoShow these pictures, by name.
sectionNoShow the pictures in this section.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnly/non-destructive, so the bar is lower; the description still adds real behavior: with no filters it enumerates everything by section with notes, and with filters it caps results at 8 at a time. No disclosure of image format, resolution, or failure modes, hence 4 rather than 5.

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

Conciseness4/5

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

Front-loaded with the core action, then the two behavioral modes, then the rationale. The closing sentence about text room and texture is somewhat motivational but does justify why seeing the image matters, so it earns most of its space.

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

Completeness4/5

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

No output schema exists, so the description must convey returns — and it does (list of pictures by section with notes, or up to 8 shown images). Combined with full schema coverage this is nearly complete, though it says nothing about how images are delivered (URL vs. inline).

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the baseline; the description goes beyond it by explaining the semantics of `section` (a section title like 'Imagery') and `names` (as the brief lists them) and by clarifying their mutual effect on output (list vs. show, max 8).

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

Purpose5/5

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

States a specific verb and resource ('Look at the pictures in a brand kit') and enumerates what a kit contains (logos, product marks, footage stills, layout references, examples), which clearly separates it from data-returning siblings like napkin_brand_get or napkin_brand_examples.

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

Usage Guidelines4/5

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

Explicitly frames the timing ('before you use them', 'Look before you build a design around a picture') and gives the rationale for doing so. It doesn't name a competing sibling tool to route against, 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.

napkin_deck_composeBuild a designed deckA
Destructive
Inspect

Builds a designed deck: each slide is a layout with its slots filled, or HTML and CSS you write; a real browser lays it out, and it becomes an ordinary Napkin deck people can edit. Use this whenever a deck should look designed — it's how to get layout, big numbers, color blocks, and pictures right.

LAYOUTS FIRST

  • For ads, posts, carousels and title slides, start from a layout (napkin_layouts_list): give layout and slots instead of html. Layouts adapt to every size, fit their text, keep to each size's safe zones, and use the brand's own logos. A slide made from a layout remembers it, so when someone resizes it, it's laid out again instead of scaled.

  • A set of ads is one slide with sizes: ["1:1","4:5","9:16","1.91:1"] — each size gets its own arrangement.

  • Write HTML only for something no layout does.

HOW TO WRITE A SLIDE

  • html is the inside of one slide: a .slide box 960×540 px (the deck's own size if it has one). Margins are reset; lay out with flexbox or grid, padding and gap. Put each slide's CSS in a block inside its html, or shared CSS in css.

  • Read the brand first (napkin_brand_get). Style ONLY with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Headings already use the heading face.

  • Pictures from the brand kit: , sized with CSS; object-fit: cover crops to fill, contain fits whole. Any workspace image: src="file:".

  • What carries over: boxes with a solid background, border, and rounded corners; text, including bold, italic, color, and size changes inside a line; pictures. What doesn't: gradients, shadows, background images, inline SVG — use solid color boxes instead.

  • Design like a designer: one idea per slide, a clear hierarchy, big numbers set large in the accent color, generous space, text 18px or larger (never under 14px), and something visual on most slides — a color panel, a photo, the logo. Keep every slide on the brand's own palette and voice.

  • Use the brand's own pictures. Put the logo on the title and closing slides (the reversed one on dark color), and use the kit's photos and icons where they carry the point — the brief lists every file under "Files", by name.

  • Say only what's true. Facts, figures, prices, eligibility, and how things work come from the brand kit and from what the user told you — never invent them. When a slide needs a fact you don't have, leave it out or ask.

HOW TO USE IT

  • New deck: pass name and all slides. Rebuild a deck: pass boardId and all slides (replaces everything on it).

  • Ads, posts and other non-slide pieces: pass size — a key like 1:1 (square post, 1080×1080), 4:5 (portrait post), 9:16 (story or reel), 1.91:1 (LinkedIn or Facebook landscape), og (link preview), 300x250 or 728x90 (display ads). The .slide box is then that shape with its long side 960 px, so type sizes mean what they do on a slide, and the deck exports at the size's real pixels. A single ad is a one-slide deck; a carousel is a deck at 1:1 or 4:5.

  • A set of ads — the same ad at several sizes, or several headlines — is one deck: give each slide its own size. Lay each size out for its own shape rather than squeezing one layout into all of them (a 9:16 story stacks what a 1.91:1 landscape puts side by side), and keep text out of the outer 7% of every edge and the top and bottom 14% of a 9:16. The deck's PNG export names each file by its pixels. Fix one slide: boardId, slide (1-based), and a single slide. Add slides: append: true.

  • The result lists each slide's warnings — text that overflows its box or the slide, overlapping text, text too small, low contrast, pictures that didn't load — and shows you a picture of every slide it made. Fix every warning and anything that reads badly in the pictures by recomposing just that slide. The contrast check is the standard one (4.5:1 for small text, 3:1 for large or bold text), so a contrast warning is real: darken the color, lighten the background, or set the text larger; never explain it away. You don't need napkin_slide_view afterwards: the pictures are the slides.

  • Cite the deck with [[board:ID]] alone on its own line.

ParametersJSON Schema
NameRequiredDescriptionDefault
cssNoCSS shared by every slide.
nameNoName for a new deck.
sizeNoThe size of every slide, for a new deck or a whole rebuild: 16:9 = Widescreen slide 1920×1080; 16:10 = 16:10 slide 1920×1200; 4:3 = Standard slide 1024×768; 1:1 = Square 1080×1080; 4:5 = Portrait post 1080×1350; 9:16 = Story and reel 1080×1920; 1.91:1 = Landscape post 1200×628; x-post = X post 1600×900; og = Link preview 1200×630; pin = Pin 1000×1500; youtube-thumb = YouTube thumbnail 1280×720; linkedin-page = LinkedIn page cover 1128×191; linkedin-profile = LinkedIn profile banner 1584×396; x-header = X header 1500×500; youtube-banner = YouTube channel banner 2560×1440; facebook-cover = Facebook cover 851×315; 300x250 = Medium rectangle 300×250; 336x280 = Large rectangle 336×280; 728x90 = Leaderboard 728×90; 970x250 = Billboard 970×250; 300x600 = Half page 300×600; 160x600 = Wide skyscraper 160×600; 320x50 = Mobile banner 320×50; 320x100 = Large mobile banner 320×100; email-header = Email header 600×200; letter = Letter page 2550×3300; a4 = A4 page 2480×3508. Omit for a 16:9 deck or to keep a deck's size.
slideNoReplace just this slide (1-based) with the one slide given.
accentNoName of one of the brand's colors to use as var(--brand-accent) for this deck — for a deck about one product or campaign that has its own color in the brand.
appendNoAdd these slides after the existing ones.
slidesYes
boardIdNoDeck to rebuild or change. Omit to make a new deck.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description earns that by disclosing the destructive semantics directly: passing boardId with all slides 'replaces everything on it'. It goes well beyond annotations with the carry-over contract (solid backgrounds/borders/radius/text/pictures survive; gradients, shadows, background images and inline SVG do not), the size/shape model, and the returned per-slide warnings plus rendered previews.

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

Conciseness4/5

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

Front-loaded with purpose, then organized under clear headers (LAYOUTS FIRST / HOW TO WRITE A SLIDE / HOW TO USE IT), and nearly every line is actionable. It is nonetheless very long for a tool description and repeats the size-set idea twice ('a set of ads is one slide with sizes' and again in HOW TO USE IT), which costs a point.

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

Completeness5/5

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

No output schema exists, and the description compensates: it explains that the result lists per-slide warnings (overflow, overlap, too-small text, low contrast, failed images) and returns a picture of every slide, plus the exact contrast thresholds. For a 9-parameter composition tool with destructive rebuild semantics, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is high (89%), so the schema already documents size keys, layout, slots and slide addressing. The description still adds real semantics the schema does not: layout-vs-html as an either/or decision, how `sizes` produces one arrangement per shape, how per-slide `size` composes a multi-size ad set, and the meaage that `css` is shared across slides. It leaves `accent`, `notes` and `picture` to the schema, hence not a 5.

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

Purpose5/5

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

States a specific verb+resource ('Builds a designed deck') and then defines what a slide actually is (a layout with slots filled, or HTML/CSS laid out by a browser, becoming an editable Napkin deck). The opening line 'Use this whenever a deck should look designed' plus the layouts-vs-HTML framing cleanly separates it from sibling tooling like napkin_layouts_list and the slide-level tools.

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

Usage Guidelines5/5

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

Gives explicit routing rules: start from a layout for ads/posts/carousels/title slides, write HTML only for something no layout does, read the brand first via napkin_brand_get, and it explicitly says 'You don't need napkin_slide_view afterwards'. It also defines when to pass name vs boardId vs slide vs append, which covers new/replace/append/single-slide-fix paths.

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

napkin_deck_exportExport a deck as imagesAInspect

Exports a deck's slides as PNG files at each slide's real pixels — a square post at 1080×1080, a story at 1080×1920, a leaderboard at 728×90 — ready to upload to an ad platform or a social post. One slide comes back as a PNG; several as a .zip named by deck, slide and size. Hidden slides are left out. The file is saved to the workspace's files; give the user downloadUrl (it opens for anyone signed in to the workspace) and say it's also in their files. Slide numbers and the workspace mark aren't drawn. For a PDF or PowerPoint, the user exports from the deck's File menu.

ParametersJSON Schema
NameRequiredDescriptionDefault
slidesNoJust these slides (1-based, as the deck shows them). Omit for every slide.
boardIdYesThe deck to export.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false): it discloses that hidden slides are omitted, that slide numbers and the workspace mark are not drawn, that a single slide returns a PNG while multiple return a named .zip, and where the file is saved. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Front-loads the core action and resolutions, then covers return shape, exclusions, and the post-call user instruction. It is dense but every sentence carries distinct information; the resolution list is slightly verbose but justified as concrete examples.

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

Completeness5/5

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

For a no-output-schema export tool, the description supplies the return shape (PNG vs .zip naming), the delivery channel (workspace files plus downloadUrl), and the exact agent behavior expected (give the user the link and note it is in their files). Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents boardId, workspace, and slides including 1-based indexing and the omit-for-all default. The description reinforces the multi-vs-single-slide behavior but adds little syntactic detail beyond the schema, so it sits above the baseline 3 but not at the top.

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

Purpose5/5

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

States a specific verb (exports) and resource (a deck's slides as PNG images), and immediately grounds it in concrete output formats and resolutions. The final sentence explicitly redirects PDF/PowerPoint needs to the deck's File menu, distinguishing this tool from that alternative.

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

Usage Guidelines5/5

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

Explicitly says when to use it (exporting deck slides as PNGs ready for ad platforms or social posts) and when not to (PDF or PowerPoint — use the File menu instead). It also clarifies the agent-follow-up action of handing the user the downloadUrl.

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

napkin_deck_outlineRead a deck's outline (markdown)A
Read-only
Inspect

Returns a Napkin deck as a markdown outline — one section per slide in presentation order, with slide titles, text content (bold + bullets preserved), empty layout stubs still awaiting content, and a summary of drawn marks. This is the cheap way to know what a deck SAYS; use napkin_slide_view when you need to see how a specific slide LOOKS. Works on any board that has slides. Cite the deck with [[board:ID]] alone on its own line.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYesNapkin board id (a deck).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the read-only, non-destructive, non-open-world profile, so the safety bar is covered. The description goes further by detailing the return shape (one section per slide, preserved bold/bullets, empty layout stubs, drawn-marks summary) and characterizing this as the 'cheap' read path, which is useful behavioral context in the absence of an output schema.

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

Conciseness4/5

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

Three sentences, front-loaded with the return format, then the routing rule, then the citation note. Every sentence carries weight, though the trailing citation sentence is slightly tangential to invocation.

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

Completeness5/5

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

For a read tool with no output schema, the description fully carries the burden: it describes the return structure, scoping, and its relationship to the sibling viewer. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both boardId and workspace are fully documented in the schema, making 3 the baseline. The description adds no syntax or format detail beyond that, though the citation convention touches on deck identity rather than parameter meaning.

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

Purpose5/5

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

States a precise verb and resource ('Returns a Napkin deck as a markdown outline') and enumerates the content it includes (slide titles, text, layout stubs, drawn marks). It explicitly distinguishes itself from the sibling napkin_slide_view by contrasting what the deck SAYS vs how a slide LOOKS.

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

Usage Guidelines5/5

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

Gives an explicit routing rule: use this to learn what a deck says, use napkin_slide_view when you need to see how a specific slide looks. Adds a scope note ('Works on any board that has slides') so the agent knows when it is applicable.

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

napkin_deck_set_themeSet a deck's themeA
Destructive
Inspect

Paints every slide of a deck with a theme — slide background, heading and body typefaces, and text colors — in one call, the same as picking it in the deck's theme menu. Font sizes are kept. Prefer "brand" (the workspace's own brand kit) unless the user asks for something else. Built-in themes: plain (Helvetica on white. Gets out of the way.); editorial (Garamond headings on cream. Reads like a document.); stage (Helvetica, light on dark, for a projected room.); blueprint (Consolas headings on mist. For technical decks.); warm (Rounded on amber. Softer than it sounds.); notebook (Marker headings. Keeps the sketchbook feel.). For one-off colors or sizes on a single shape, use napkin_draw's updates instead. Check the result with napkin_slide_view.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeYes`brand` for the workspace's brand kit, `brand:<kit id>` for a particular kit (napkin_brand_list), or a built-in theme key.
accentNoBrand themes only: the name of one of the kit's colors to use as this deck's accent instead of the kit's own — for a deck about one product or campaign that has its own color in the brand.
boardIdYesNapkin board id (a deck).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the destructive, non-read-only profile, so the burden is lower. The description still adds real behavioral detail beyond them — 'Font sizes are kept' tells the agent exactly what is preserved when the theme is repainted, which is not derivable from the schema or annotations. It stops short of explicitly saying the previous theme styling is replaced/irreversible, so it is not a full 5.

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

Conciseness4/5

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

The core action and the alternate-tool routing are front-loaded in the first sentences; the theme catalog and verification hint follow. The six-item theme list is dense but earns its place because no enum exists in the schema. Minor padding in the flavor text of each theme name.

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

Completeness5/5

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

For a bulk-mutation tool with no output schema and full schema-description coverage, the definition supplies the affected scope, the preservation rule, the recommended default, the value catalog, an alternative tool, and a verification step. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by enumerating the built-in theme keys (plain, editorial, stage, blueprint, warm, notebook) with a semantic gloss for each — effectively supplying the enum that the schema lacks (0 enums declared). This meaningfully constrains the required `theme` string. The `accent` and `workspace` semantics remain schema-only.

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

Purpose5/5

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

States a specific verb and resource ('Paints every slide of a deck with a theme') and enumerates exactly what is affected — slide background, headings, body typefaces, text colors. It is clearly distinguishable from the sibling write paths (napkin_draw updates, napkin_slide_update) that it explicitly routes away from.

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

Usage Guidelines5/5

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

Gives explicit when-to-prefer guidance ('Prefer "brand" ... unless the user asks for something else'), names the alternative for the adjacent use case ('For one-off colors or sizes on a single shape, use napkin_draw's `updates` instead'), and prescribes a verification step ('Check the result with napkin_slide_view'). Nothing is left to inference.

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

napkin_deck_writeWrite a whole deck from a markdown outlineAInspect

Creates a deck from a markdown outline — the SAME dialect napkin_deck_outline reads back, so any deck you've read shows the format. Decks are SLIDES for presenting; a prose document ('write this up', 'draft a doc') is napkin_docs_create instead. Rules: ## Heading starts a slide (heading becomes the slide title and its biggest text block); optional trailing [layout: title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank]; body lines fill the layout's remaining text areas in order, split into areas by a line containing only ---; - bullets are kept as bullets. Slides default to title-body (or title, when bodyless). Layout text areas you don't fill stay as visible prompts for the user. Example:

Q3 Review [layout: title]

What happened, what's next

Revenue [layout: title-body]

  • up 40% QoQ

  • churn flat

Bets [layout: two-column]

Double down on decks

Sunset legacy plans

After writing, cite the deck with [[board:ID]] alone on its own line — the user opens it from there.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDeck name.
outlineYesThe markdown outline (dialect above).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only declare write/non-destructive/non-open-world, so the description carries the real burden and does: it documents the full outline dialect, the layout enum, the `---` area-splitting rule, that unfilled layout areas stay as user-visible prompts, and the required `[[board:ID]]` citation after writing. It stops short of stating failure/overwrite behavior or limits, keeping it from a 5.

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

Conciseness4/5

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

Front-loads purpose and sibling routing before the format spec, and every sentence does work — the rules and example are load-bearing for a format-heavy tool. It is long, but far less could not specify this dialect; only mild trimming is possible.

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

Completeness5/5

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

For a 3-param, no-output-schema writer, the definition is complete: authoring format, layout vocabulary, sibling disambiguation, and the post-write citation step that tells the user how to open the result. The remaining workspace/auth nuance is already carried by the schema's `workspace` description.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description goes well beyond the schema's 'The markdown outline (dialect above)' by fully specifying the dialect, layout values, and bullet handling. It adds little for `name` and `workspace`, which the schema already covers, so it tops out at 4.

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

Purpose5/5

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

States a concrete verb+resource ('Creates a deck from a markdown outline') and immediately anchors it against two siblings: it is the writing counterpart to napkin_deck_outline and is explicitly NOT napkin_docs_create. An agent can route to it without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit when-not with the alternative named: a prose document ('write this up', 'draft a doc') belongs to napkin_docs_create instead. It also fixes the round-trip contract with napkin_deck_outline so the agent knows this is the write side of that dialect. Nothing essential is left to inference.

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

napkin_diagrams_createCreate a Napkin diagramAInspect

Create a Napkin diagram — an interactive FLOWCHART (process, decision tree, system map), not a doc (napkin_docs_create) or drawing canvas (napkin_boards_create). Pass the mermaid source. Use for process maps the user asked you to draw. After creating, cite it as [[diagram:ID]] alone on its own line — it renders as a clickable card. NEVER cite it as [[board:ID]].

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
sourceNoMermaid flowchart source. Start with `flowchart TD` (top-down) or `flowchart LR` (left-right). Declare shaped nodes — `A["Rect"]`, `B("Rounded")`, `C{"Decision"}`, `D(["Stadium"])`, `E(("Circle"))`, `F{{"Hexagon"}}` — and link them with `A -->|label| B`, `A -.-> B` (dotted), or `A ==> B` (thick). Group steps with `subgraph Name["Title"] ... end`. Color a node with a trailing `style A fill:#fee2e2` line. Only the flowchart subset is supported.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds substantial behavioral context beyond that: the output renders as an interactive clickable card, must be cited as [[diagram:ID]] on its own line, and must never be cited as [[board:ID]]. It omits any mention of auth/scoping limits, but the added rendering and citation semantics are genuinely useful.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the identity/scope distinction, followed by the input requirement and then output/citation behavior. No filler and no repetition of the title.

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

Completeness4/5

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

No output schema exists, and the description compensates by specifying the citation format the agent must emit. Combined with annotations covering the safety profile and the rich 'source' schema, the definition is near-complete for a create tool; only auth/workspace scoping behavior is left to the schema.

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

Parameters3/5

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

Schema coverage is 67%, and the 'source' parameter is already heavily documented in the schema (mermaid syntax, node shapes, subgraphs, styling). The description only restates 'Pass the mermaid source', adding no syntax or constraint detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Create a Napkin diagram — an interactive FLOWCHART') and immediately draws the boundary against the two nearest siblings by name (napkin_docs_create, napkin_boards_create). An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names the alternatives and what this tool is NOT ('not a doc... or drawing canvas'), then gives the positive trigger condition ('Use for process maps the user asked you to draw'). The mermaid input requirement further constrains selection.

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

napkin_diagrams_getRead a Napkin diagramA
Read-only
Inspect

Fetch one Napkin diagram's mermaid source by id (from napkin_diagrams_list). Read before editing — napkin_diagrams_update replaces the whole source.

ParametersJSON Schema
NameRequiredDescriptionDefault
diagramIdYesDiagram id from napkin_diagrams_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds return-content information ('mermaid source'), which matters because there is no output schema, plus a warning about update's whole-source replacement.

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

Conciseness5/5

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

Two sentences, zero filler, with the primary action front-loaded and the editing caveat second. Every clause earns its place.

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

Completeness4/5

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

For a simple read tool with no output schema, the description discloses the return type and the read-before-write workflow, which is what an agent needs. The workspace/token nuance lives fully in the schema, so nothing critical is missing.

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

Parameters3/5

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

With 2 parameters and 100% schema description coverage, the schema already documents diagramId and the workspace/token rules. The description only implies the id provenance, adding little beyond what the schema provides.

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

Purpose5/5

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

States a specific verb and resource ('Fetch one Napkin diagram's mermaid source by id'), and pins the id's origin to the sibling napkin_diagrams_list. An agent can distinguish this from napkin_diagrams_list and napkin_diagrams_update without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit sequencing guidance ('Read before editing') and names the sibling that makes it necessary ('napkin_diagrams_update replaces the whole source'). The when-to-use and the reason are both stated.

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

napkin_diagrams_listList Napkin diagramsA
Read-only
Inspect

Lists the workspace's Napkin diagrams (interactive flowcharts — processes, decision trees, system maps) newest first. Archived diagrams are hidden unless includeArchived; q narrows by title. Fetch one's mermaid source with napkin_diagrams_get. When referring the user to a diagram in your reply, put [[diagram:ID]] alone on its own line — it renders as a clickable card. NEVER cite a diagram as [[board:ID]]; boards are sketches.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTitle contains (case-insensitive).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
includeArchivedNoAlso list archived diagrams (default false).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description still adds real behavior: default sort order (newest first), default filtering of archived items, and the output-rendering contract that `[[diagram:ID]]` alone on a line becomes a clickable card. Minor gap: no pagination or result-count behavior mentioned.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and scope, followed by filtering and routing. No redundancy; the citation-format sentence earns its place because it governs how the agent must emit output.

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

Completeness5/5

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

With no output schema, the description carries the return-shape burden and does so adequately — it states what is listed, in what order, what is excluded by default, and how to retrieve per-item detail. Safety is covered by annotations, so nothing material is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (q, workspace, includeArchived) are already documented in structured data; baseline is 3. The description restates q's title-matching and includeArchived's archived-reveal behavior without adding format or syntax beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Lists the workspace's Napkin diagrams') and defines the artifact inline as 'interactive flowcharts — processes, decision trees, system maps', which separates it from the sibling napkin_boards_list (sketches) without opening either schema. 'Newest first' adds ordering scope.

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

Usage Guidelines5/5

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

Gives explicit conditionals: archived hidden unless `includeArchived`, `q` narrows by title, and routes to napkin_diagrams_get for a single diagram's mermaid source. It also states the exclusion — never cite a diagram as [[board:ID]] because boards are sketches — which is a genuine when-not rule.

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

napkin_diagrams_updateEdit a Napkin diagramA
Destructive
Inspect

Edit a Napkin diagram: retitle, describe, REPLACE the whole mermaid source, set visibility, or archived (true takes it out of the gallery, false brings it back — the recovery move for a diagram created by mistake). Read the diagram first (napkin_diagrams_get) so your new source keeps the parts the user wants. Diagram ids come from napkin_diagrams_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
sourceNoMermaid flowchart source. Start with `flowchart TD` (top-down) or `flowchart LR` (left-right). Declare shaped nodes — `A["Rect"]`, `B("Rounded")`, `C{"Decision"}`, `D(["Stadium"])`, `E(("Circle"))`, `F{{"Hexagon"}}` — and link them with `A -->|label| B`, `A -.-> B` (dotted), or `A ==> B` (thick). Group steps with `subgraph Name["Title"] ... end`. Color a node with a trailing `style A fill:#fee2e2` line. Only the flowchart subset is supported.
archivedNo
diagramIdYesDiagram id from napkin_diagrams_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.
visibilityNoWho can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE.
descriptionNoShort gallery summary.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description earns credit by explaining the nature of that destruction: 'REPLACE the whole mermaid source' signals a full overwrite rather than a merge, and archived true/false is described as the undo path for a mistaken creation. The approvalId round-trip is only hinted at via the schema, not elaborated here, keeping this from a 5.

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

Conciseness4/5

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

Front-loads the enumeration of editable fields and then attaches the read-before-edit prerequisite and id source, with no filler sentences. Dense but every clause carries a distinct instruction; minor markdown/backtick noise slightly hurts readability.

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

Completeness4/5

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

For an 8-parameter, destructive mutation tool with no output schema and no annotations beyond the safety hints, it covers the replacement semantics, the recovery move, and where ids come from. The approval/confirmation flow and return behavior are left partly implicit, but nothing critical to correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 75%, so most parameters carry their own descriptions. The description adds real meaning for `source` (whole-source replacement) and `archived` (gallery removal/recovery), but leaves title, description, workspace, and approvalId to the schema — baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Edit a Napkin diagram') and enumerates the exact editable fields (retitle, describe, source, visibility, archived). It also names the sibling tools that supply the diagram id and current state (napkin_diagrams_get, napkin_diagrams_list), so it is distinguishable without opening another schema.

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

Usage Guidelines4/5

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

Gives a concrete workflow prerequisite ('Read the diagram first (napkin_diagrams_get) so your new source keeps the parts the user wants') and explains the recovery scenario for archived=true/false. It stops short of explicitly contrasting update against napkin_diagrams_create, so it is clear context rather than a full when/when-not map.

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

napkin_docs_createCreate a Napkin docAInspect

Create a Napkin doc — a markdown DOCUMENT (prose, structure, code blocks), not a drawing canvas (that's napkin_boards_create) and not slides (napkin_deck_write). Optionally pass a title and initial markdown body. Use for drafts the user asked you to start. After creating, cite it as [[doc:ID]] alone on its own line — it renders as a clickable card. NEVER cite it as [[board:ID]].

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoInitial markdown body. Write each paragraph as ONE long line — the editor wraps text to the reader's column, and hard-wrapped source shows up as narrow ragged lines when someone opens the paragraph to edit it.
titleNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds genuinely non-structured behavior: the post-creation citation contract ([[doc:ID]] on its own line, renders as a card, never [[board:ID]]). It does not mention auth/workspace constraints, but the schema carries those, so the remaining gap is minor.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the artifact type, then the disambiguation, then the citation rule. Every sentence carries decision-relevant information; there is no filler.

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

Completeness4/5

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

For a creation tool with no output schema, the description covers the type, the optional inputs, and the required follow-up citation format — enough to call it correctly. It stops short of stating the returned identifier shape explicitly (the [[doc:ID]] hint implies it), a small remaining gap.

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

Parameters3/5

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

Schema coverage is 67%. The body parameter is richly documented in the schema itself (single-long-line markdown guidance), and the description only says it is optional. The title parameter has no schema description at all, and the description only adds 'optionally pass a title.' Marginal added meaning over structured fields.

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

Purpose5/5

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

States a specific verb and resource ('Create a Napkin doc — a markdown DOCUMENT') and immediately disambiguates from the two most confusable siblings by name: napkin_boards_create and napkin_deck_write. An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit usage condition ('Use for drafts the user asked you to start') and explicit alternatives for the neighboring artifact types (drawing canvas -> napkin_boards_create, slides -> napkin_deck_write). This is when-to-use plus when-not, which is the top of the scale.

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

napkin_docs_getRead a Napkin docA
Read-only
Inspect

Fetch one Napkin doc's full markdown body by id (from napkin_docs_list). Read before editing — napkin_docs_update replaces or appends against the current body.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYesDoc id from napkin_docs_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds useful behavior beyond them: the response is the full markdown body, and the read-before-edit relationship to napkin_docs_update's replace/append semantics.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, then the workflow caveat. No filler or restatement of the name.

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

Completeness5/5

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

For a simple id-based read with fully documented schema params and no output schema, the description supplies the needed return-format hint (full markdown body) and the editing workflow context. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and both params are documented there, including the workspace/token-default nuance, so baseline 3 applies. The description only reinforces docId provenance ('from napkin_docs_list') and adds nothing about the workspace parameter.

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

Purpose5/5

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

States a specific verb (fetch), resource (one Napkin doc), scope (full markdown body) and the lookup key (id). This clearly separates it from napkin_docs_list (enumerates) and napkin_docs_update (mutates), so an agent can select it without inspecting siblings.

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

Usage Guidelines4/5

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

Gives an explicit workflow condition — 'Read before editing' — and names napkin_docs_update as the reason, plus points to napkin_docs_list as the id source. It stops short of stating any exclusion or fallback case, so it is strong context rather than full when/when-not routing.

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

napkin_docs_listList Napkin docsA
Read-only
Inspect

Lists the workspace's Napkin docs (quick markdown documents — drafts, notes, working text; the LINEAR surface, distinct from boards which are drawing canvases) newest first, with excerpts. Archived docs are hidden unless includeArchived; q narrows by title. Fetch one with napkin_docs_get. When referring the user to a doc in your reply, put [[doc:ID]] alone on its own line — it renders as a clickable card. NEVER cite a doc as [[board:ID]]; boards are sketches.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTitle contains (case-insensitive).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
includeArchivedNoAlso list archived docs (default false).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), and the description still adds real behavior: default ordering (newest first), the return shape (excerpts), the default filtering of archived docs, and the output contract for citing docs ([[doc:ID]] on its own line, never [[board:ID]]). That is substantive disclosure beyond what the structured fields provide.

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

Conciseness4/5

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

The description is front-loaded with the purpose and scope, then the filtering behavior, then the citation contract, with no filler sentences. The closing board guardrail ('NEVER cite a doc as [[board:ID]]; boards are sketches') partly echoes the earlier board distinction, but it functions as a distinct output-format constraint rather than pure repetition.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of describing returns, and it does so (newest first, with excerpts) while also covering default filtering and the ID-citation format. For a three-parameter read-only list tool, nothing an agent needs to call or report results correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents q as case-insensitive title matching, workspace auth semantics, and includeArchived's default false. The description largely restates these ('q narrows by title', 'Archived docs are hidden unless includeArchived'), so it adds framing but no new syntax or meaning, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Lists the workspace's Napkin docs') and explicitly delineates the resource from its closest sibling surface ('the LINEAR surface, distinct from boards which are drawing canvases'). It also distinguishes listing from retrieval by pointing to napkin_docs_get, so an agent can separate it from both napkin_boards_list and napkin_docs_get without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context: use this to enumerate docs newest-first with excerpts, then 'Fetch one with napkin_docs_get' for a single doc, and names the conditions that change results (includeArchived, q). It does not, however, address when to prefer this over search-style siblings like search_docs or list_docs, so the routing guidance is clear but not exhaustive.

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

napkin_docs_updateEdit a Napkin docA
Destructive
Inspect

Edit a Napkin doc. For a change to existing prose use edits — a list of exact find/replace pairs, which is the SAFEST option and the one to reach for by default: it leaves everything you did not target untouched, and it fails loudly rather than clobbering a doc somebody else is typing in. append adds a section at the end. body replaces the WHOLE document and should be a last resort. Also retitle, describe, set visibility, or archived (true takes it out of the gallery, false brings it back). Read the doc with napkin_docs_get first — edits match the current text exactly. Doc ids come from napkin_docs_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoFull replacement markdown body. Prefer `edits` — this overwrites everything. Write each paragraph as ONE long line; the editor wraps it for the reader.
docIdYesDoc id from napkin_docs_list.
editsNoTargeted find/replace pairs, applied in order. All must match or none are applied.
titleNo
appendNoMarkdown appended to the end (own paragraph).
archivedNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.
visibilityNoWho can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE.
descriptionNoShort gallery summary.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, and the description backs this with real consequences: edits 'fail loudly rather than clobbering a doc somebody else is typing in,' body 'replaces the WHOLE document,' archived toggles gallery visibility. It doesn't cover failure modes like concurrent-edit conflicts or the needs_confirmation/approvalId flow its annotations imply, but the destructive-risk context is strong.

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

Conciseness4/5

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

Front-loaded with the default recommendation (edits) before the riskier alternatives, and each mode gets a compact clause. Slightly dense in one paragraph, but every sentence either routes a decision or warns of a consequence.

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

Completeness4/5

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

Covers the mutation modes, the ordering constraint for edits ('applied in order. All must match or none are applied'), and the prerequisite read. For a 10-param destructive tool with no output schema, this is adequate, though it omits the approvalId/needs_confirmation path and workspace-token nuances the schema describes.

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

Parameters4/5

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

Schema coverage is 80%, so the schema carries most param detail. The description still adds value by naming which param does what ('`append` adds a section at the end', archived semantics), but it doesn't explain workspace/visibility/approvalId quirks beyond what the schema already documents.

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

Purpose5/5

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

States a specific verb (edit) and resource (Napkin doc), then enumerates the exact mutation modes (edits, append, body, retitle/describe/visibility/archive). An agent can distinguish this from napkin_docs_create and napkin_docs_get immediately.

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

Usage Guidelines5/5

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

Gives explicit prioritization among alternatives: `edits` is 'the SAFEST option and the one to reach for by default,' `body` is 'a last resort.' It also mandates reading the doc first via napkin_docs_get, which is a concrete precondition no other tool provides.

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

napkin_drawDraw on a Napkin boardA
Destructive
Inspect

Draws shapes, strokes, and labels on a board — diagram on a sketch, annotate a deck slide — and, via updates / deletes, changes or removes shapes that are already there (ids from napkin_boards_get; the fix for something you drew wrong). For NEW elements never compute absolute board coordinates: with slide, coordinates are slide-local — (0, 0) top-left to (960, 540) bottom-right of that slide. Without slide (sketches), (0, 0) is the top-left of the existing content — the same area napkin_boards_view renders, so place by what you saw there; on an empty board just start at (0, 0). Example — circle a slide's title and margin-note it:

{"boardId": "…", "slide": 2, "elements": [ {"type": "ellipse", "x": 60, "y": 40, "w": 400, "h": 90, "color": "#dc2626"}, {"type": "arrow", "x": 560, "y": 140, "x2": 470, "y2": 90, "color": "#dc2626"}, {"type": "text", "x": 575, "y": 130, "w": 260, "text": "tighten this claim", "color": "#dc2626"} ]}

After drawing, cite the board with [[board:ID]] alone on its own line.

ParametersJSON Schema
NameRequiredDescriptionDefault
slideNo1-based slide number (decks only) — makes coordinates slide-local.
boardIdYesNapkin board id.
deletesNoIds of existing shapes to remove (from napkin_boards_get).
updatesNoExisting shapes to change — move, resize, retext, restyle. Read napkin_boards_get first for ids and current geometry.
elementsNoNew elements to draw, painted in order.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false; the description is consistent and adds real context on top — that deletes are the fix for a mis-drawn element, that ids must be sourced from napkin_boards_get, and how coordinate frames differ for slides vs sketches. It stops short of stating whether deletions are reversible or how many ops can be batched atomically.

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

Conciseness4/5

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

Front-loads the draw/create capability, then mutation, then the coordinate rules, then a compact example. Dense but each part carries information; the trailing citation instruction is short and actionable. Slightly heavy for a single description, but nothing is filler.

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

Completeness4/5

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

For a 6-parameter mutation tool with no output schema, it covers the two things an agent would most likely get wrong — where to get shape ids and which coordinate space applies. It omits batching limits (maxItems 100) and the workspace-slug requirement noted in the schema, so slightly incomplete rather than fully self-contained.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents parameters and the baseline is 3. The description goes beyond it with origin/coordinate-frame semantics (slide-local 0,0→960,540; board-relative for sketches), a worked example of an ellipse+arrow+text cluster, and the rule that ids come from napkin_boards_get.

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

Purpose5/5

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

States specific verbs and resource: draws shapes/strokes/labels on a board, and via updates/deletes changes or removes existing shapes. Explicitly distinguishes itself from the read-side siblings napkin_boards_get and napkin_boards_view, so an agent can tell what this tool owns versus its neighbors.

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

Usage Guidelines4/5

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

Gives concrete usage contexts ('diagram on a sketch, annotate a deck slide') and routes the agent to napkin_boards_get for ids and napkin_boards_view for the coordinate frame the renderer uses. It does not, however, explicitly rule out nearby draw-capable siblings such as napkin_diagrams_create or napkin_deck_compose, leaving some alternative-selection inference to the agent.

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

napkin_interfaces_createCreate a Napkin interfaceAInspect

Create an interface — a small screen of its own the user can open and send to people. Use when someone asks for a custom chat UI, a little tool, or a prototype of how something would feel in their product. It starts with a working index.html you then edit. It can reach NOTHING in the workspace until a flow is granted with napkin_interfaces_grant. Cite it in your reply as [[interface:ID]] alone on its own line — it renders as a card the user can click. Do NOT paste an image URL or try to embed the picture yourself; that renders as a broken image. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. There is NO build step and NO library: no React, no Tailwind, no CDN. A to anywhere but this origin is blocked, so write vanilla JS and put styles in a block. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with { viewer, flows }, and zw.flows.run(flowId, input) runs a flow the interface was granted. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. Style it plainly and legibly: a system font stack, generous spacing, one column unless there's a reason. It runs on phones too.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
starterNoWhich worked example to start from. `chat` is a conversation against one flow; `form` is labelled fields sent as a form run; `decision` is text in and a shim's answer out. `blank` (the default) is a title and the client library — take it when none of the others is the shape you want, rather than deleting one you didn't need.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior5/5

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

With annotations only declaring the generic safe-mutation profile, the description carries real behavioral weight: the interface starts from a working index.html, reaches nothing in the workspace until a flow is granted, has no build step or libraries, blocks cross-origin scripts/webfonts/external images, returns an ID to cite as [[interface:ID]], and requires a view pass before delivery. These are concrete operational traits an agent could not infer from readOnlyHint/destructiveHint/openWorldHint.

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

Conciseness3/5

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

The purpose and when-to-use lead, so it is front-loaded, and each sentence is individually useful. But it is a ~700-word unstructured block that blends creation guidance with client-library API reference (shim envelopes, streaming, rAF conflicts, window-name collisions) that would be more appropriate elsewhere, imposing significant reading cost on tool selection.

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

Completeness5/5

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

For a create tool with no output schema, the description covers everything an agent needs: what gets produced, the starter files, the grant/brand/view workflow, how the result is cited, and which sibling tools to call next. Nothing material about invoking or using the created artifact is missing.

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

Parameters3/5

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

Schema description coverage is 67%, with the starter enum thoroughly documented in-schema and workspace explained in-schema; only `name` is bare. The description adds nothing about the three parameters themselves (notably the meaningful blank/chat/form/decision choice), so it does not go beyond structured data. Baseline 3 is appropriate.

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

Purpose5/5

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

The first sentence gives a specific verb and resource plus a plain-language gloss ('Create an interface — a small screen of its own the user can open and send to people'), and the surrounding text implicitly separates this from napkin_interfaces_write (edits after creation), napkin_interfaces_grant (permissions), and napkin_interfaces_view (rendering). An agent knows exactly what artifact it is producing.

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

Usage Guidelines4/5

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

Explicitly names the triggering requests ('a custom chat UI, a little tool, or a prototype of how something would feel in their product') and routes the agent to prerequisites and follow-ups (napkin_brand_get first, napkin_interfaces_grant for access, napkin_interfaces_view before handing over). It never states when NOT to use it or contrasts with the sibling napkin_interfaces_write/create-vs-edit boundary explicitly, 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.

napkin_interfaces_getRead a Napkin interfaceA
Read-only
Inspect

Read one interface: its name, the flows it may run (with the published version each is pinned to), and the contents of its files. READ BEFORE EDITING — napkin_interfaces_write matches text exactly against what is there now. Pass a path to read one file when the interface has several. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. There is NO build step and NO library: no React, no Tailwind, no CDN. A to anywhere but this origin is blocked, so write vanilla JS and put styles in a block. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with { viewer, flows }, and zw.flows.run(flowId, input) runs a flow the interface was granted. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. Style it plainly and legibly: a system font stack, generous spacing, one column unless there's a reason. It runs on phones too.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOne file to read, e.g. index.html. Omit for every file.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
interfaceIdYesInterface id from napkin_interfaces_list.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered without the description. The description does add real behavioral value by spelling out the read payload (files, flow grants and their pinned versions) and the single-file path mode, but the bulk of its behavioral text concerns authoring, rendering, shims and streaming — traits of sibling tools, not of this read call.

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

Conciseness2/5

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

The purpose is front-loaded in the first sentence, which is good. But the description then runs several hundred words on brand variables, blocked CDNs, image sources, shim decision envelopes, streaming callbacks and reserved global variable names — almost none of which can be acted on when reading an interface. Most sentences do not earn their place in this tool.

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

Completeness4/5

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

There is no output schema, so the description carries the job of explaining what comes back, and it does so concretely (name, granted flows with pinned versions, file contents, single-file mode). For a three-parameter read tool that is sufficient; the only shortfall is that the excess authoring guidance dilutes rather than completes the picture.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (interfaceId, path, workspace) are already documented in the schema, including 'Omit for every file'. The description's 'Pass a path to read one file' merely restates what the schema's path description already says, adding no syntax, format or edge-case detail. Baseline 3 is correct when the schema does the heavy lifting.

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

Purpose5/5

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

The opening sentence states a specific verb and resource and enumerates exactly what is returned: the name, the flows it may run with the published version each is pinned to, and the contents of its files. It also distinguishes itself from the sibling it overlaps with ('READ BEFORE EDITING — napkin_interfaces_write matches text exactly against what is there now'), so an agent can separate the read from the write without opening either schema.

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

Usage Guidelines4/5

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

Usage is clearly framed as a prerequisite step ('READ BEFORE EDITING') and it names the alternative it pairs with, plus a per-call scope rule ('Pass a path to read one file when the interface has several'). It does not, however, state when NOT to reach for this tool — e.g. that napkin_interfaces_list is what you call to enumerate interfaces rather than one-by-one reads.

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

napkin_interfaces_grantChange what a Napkin interface can reachA
Destructive
Inspect

Set what an interface may run — flows and shims, each pinned to a published version. This is the interface's ONLY reach into the workspace, and it replaces the whole list, so include everything it should keep. Ids and published versions come from workbench_flows_list / workbench_shim_list and their revisions. Ask the user before widening this.

ParametersJSON Schema
NameRequiredDescriptionDefault
grantsYesThe complete list. Passing an empty list removes all access.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.
interfaceIdYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations flag destructive/openWorld, and the description adds crucial detail beyond them: this replaces the entire list, an empty list removes all access, and widening requires user consent. These are exactly the behaviors an agent must know before calling a destructive setter.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and scope, then the replacement warning, then the consent rule. No padding or restated field names.

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

Completeness4/5

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

For a destructive, no-output mutation tool this covers purpose, full-replace semantics, empty-list behavior, id sourcing, and consent. It omits what happens to in-flight runs or whether a prior state can be recovered, a minor gap.

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

Parameters4/5

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

Schema coverage is 75% and already documents grants/version/workspace/approvalId; the description adds sourcing guidance (where targetIds and published versions come from) that the schema does not state, which is meaningful beyond the baseline.

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

Purpose5/5

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

States a specific verb and resource — setting what an interface may run by granting flows and shims pinned to published versions. The scope phrase 'the interface's ONLY reach into the workspace' pins down exactly what this tool governs, distinct from napkin_interfaces_write/publish siblings.

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

Usage Guidelines4/5

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

Gives the key when-to-use context (replace the whole grant list, include everything to keep) plus where the required ids/versions come from (workbench_flows_list / workbench_shim_list and revisions), and a caution to ask the user before widening. It does not name a sibling alternative or a when-not-to-use case, keeping it below a 5.

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

napkin_interfaces_listList Napkin interfacesB
Read-only
Inspect

List the interfaces in a workspace — small self-contained screens (a custom chat, a control panel, a prototype) that run on their own origin and can call the flows they've been granted. Returns ids, names and how many flows each may run.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
includeArchivedNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value by explaining what the returned entities are and that results include ids, names and per-interface flow counts. It stops short of describing pagination, ordering, or how archived items affect results.

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

Conciseness4/5

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

Two front-loaded sentences with a definition and a return summary; every clause earns its place and nothing is padded. Minor cost is that the parenthetical examples lengthen the definition without aiding selection.

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

Completeness4/5

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

For a read-only list with full annotation coverage, the description is nearly sufficient: it defines the resource and summarizes the return shape, which matters since there is no output schema. The one material hole is the undocumented includeArchived parameter, which the description should have covered given the schema gap.

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

Parameters2/5

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

Schema coverage is only 50%: the workspace parameter is documented in the schema, but includeArchived carries no description anywhere. The prose mentions neither parameter, so it does not compensate for the gap — an agent gets no signal on what includeArchived does or whether workspace is optional.

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

Purpose4/5

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

States a specific verb (List) and resource (interfaces in a workspace) and even defines what an interface is — a self-contained screen running on its own origin — which is genuinely clarifying. It does not, however, distinguish this from sibling reads like napkin_interfaces_get or napkin_interfaces_view, so an agent still infers the list-vs-single distinction.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no statement of preconditions, and no reference to the sibling retrieval tools (get/view) that an agent would need to choose between. Usage is only weakly implied by the verb 'List'.

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

napkin_interfaces_publishSave a version of a Napkin interfaceAInspect

Save where an interface is now as a numbered version. Share links point at a published version, so what someone was sent doesn't change while work continues. Do this when the user says it's ready to show people, not after every edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOne line on what changed.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
interfaceIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish that this is a non-destructive but mutating write (readOnlyHint=false, destructiveHint=false). The description adds genuine behavioral context beyond that: published versions are what share links point at, so a sent link is frozen while work continues. It does not cover permission/auth requirements or what the returned version looks like.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the core action and then the rationale plus usage condition. No filler, no repetition of the title or schema.

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

Completeness4/5

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

For a low-complexity 3-parameter tool with no output schema and annotations covering the safety profile, the description supplies the conceptual model (versioned publish, frozen share links) and usage timing. The only real gap is that the required interfaceId is never referenced anywhere in prose, but the schema's required list covers it.

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

Parameters3/5

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

Schema coverage is 67%: note and workspace are documented in the schema, but the required interfaceId has no description, and the description itself never mentions any parameter. With the schema already carrying most of the param meaning, the baseline of 3 applies and the description adds nothing to compensate for the undocumented required parameter.

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

Purpose4/5

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

"Save where an interface is now as a numbered version" states a specific verb (save/publish) and a specific resource outcome (a numbered interface version), which is a meaningfully different operation from siblings like napkin_interfaces_write or napkin_interfaces_create. It does not name any sibling explicitly, so an agent must infer the boundary itself.

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

Usage Guidelines4/5

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

The description gives an explicit trigger ("when the user says it's ready to show people") and an explicit exclusion ("not after every edit"), which is strong when-to-use guidance. It stops short of naming the alternative tool to use for ordinary edits, leaving that inference to the agent.

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

napkin_interfaces_viewLook at a Napkin interfaceA
Read-only
Inspect

See what an interface LOOKS like right now: the whole page, drawn from its current files at desktop width under the same rules as the live page (no web fonts, no remote pictures). Use it after every write and before saying an interface is finished: reading the code tells you what you wrote, not what it renders. Look for text that's too small or runs together, stray system fonts, emoji standing in for icons, and anything that doesn't look like the brand.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
interfaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare a safe read-only, non-destructive operation. The description adds real behavioral context beyond that: rendering is desktop width only, uses the live page's rules, and excludes web fonts and remote pictures. It stops short of describing the return artifact (image vs. HTML), which would matter most for a view tool.

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

Conciseness4/5

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

Front-loaded with the core action, then usage timing, then a concrete inspection checklist. Three sentences with no filler, though the 'look for' list is slightly long relative to the rest.

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

Completeness3/5

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

There is no output schema, so the description carries the burden of saying what comes back, and it never states the return format (screenshot, image URL, or markup). It covers rendering rules and the inspection intent well, but leaves that output-shape gap and the undocumented interfaceId for an agent to guess.

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

Parameters2/5

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

Schema coverage is only 50%, so the description is expected to compensate, and it says nothing about either parameter. interfaceId is left entirely undocumented and workspace constraints are not restated from the schema. The 50% gap is not closed by the prose.

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

Purpose5/5

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

States a specific verb (see/look at) and resource (a Napkin interface), and immediately distinguishes itself from reading code by contrasting render versus source. The sibling set includes interfaces_get/write/list/get, and 'see what an interface LOOKS like right now' clearly separates this render/view tool from those.

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

Usage Guidelines4/5

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

Gives explicit timing guidance: 'Use it after every write and before saying an interface is finished.' That is a clear when-to-use rule. It does not name sibling alternatives (e.g., interfaces_get for metadata) or state when not to use it, 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.

napkin_interfaces_writeEdit a Napkin interface's filesA
Destructive
Inspect

Write one file of an interface. Use edits — exact find/replace pairs — which is the SAFEST option and the one to reach for by default: it leaves everything you did not target untouched, and it fails loudly rather than clobbering a file somebody is editing. body replaces the WHOLE file and is for a new file or a deliberate rewrite. deleteFile removes one (index.html can't be removed). Read with napkin_interfaces_get first — edits match the current text exactly. Also rename, describe, set visibility, or archive. An interface is plain HTML, CSS and JavaScript in one or more files, served from its own origin. There is NO build step and NO library: no React, no Tailwind, no CDN. A to anywhere but this origin is blocked, so write vanilla JS and put styles in a block. index.html is the entry point and must exist. THE BRAND: every interface carries the workspace brand as files — link it with and style with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Never hard-code the brand's colours or font names. brand.css already loads the brand's own font files; web fonts (Google Fonts or any other) are BLOCKED, so linking one leaves the page in a system font. The brand's logos are files under brand/ (brand.css lists them at the top): . Use the logo rather than typing the name, and real icons (inline SVG) rather than emoji. Read the brand with napkin_brand_get first, and say only what the brand kit or the user tells you. PICTURES: a picture from anywhere on the web is BLOCKED and draws as a broken image, so never use an external image URL. Show a picture from the workspace's files with (in CSS, url(file:)) — PNG, JPEG, GIF or WebP, up to 5 MB. Write the reference literally; a file id assembled in JavaScript is not found. When the user gives you a picture in chat, save it with workspace_files_save_from_chat and use the file id it returns. A picture that's only on a website has to be attached in chat first, or uploaded in the interface's Files panel. LOOK before you hand it over: napkin_interfaces_view draws the page as it is now. Fix anything that doesn't look like the brand and look again. Load the client with . Then zw.ready() resolves with { viewer, flows }, and zw.flows.run(flowId, input) runs a flow the interface was granted. Input is {kind:"chat", messages:[{role:"user", content:"…"}]} or {kind:"form", values:{…}} — the same shapes the public API takes. zw.replyText(result) pulls the assistant text out of a chat result. A SHIM is not a flow and takes a different call: zw.shims.run(shimId, text), which decides on the viewer's own device with no network and no cost. It resolves with the same envelope a flow does, so read the decision with zw.decision(result) — NOT result.decision, which is undefined and makes an interface show one answer for every input. The decision is { answer, confidence, familiarity, action, probs, gates }; branch on action, the shim's own call about whether it was sure enough. Calling zw.flows.run with a shim id is refused. ctx.grants tells you which you have: each entry carries a kind of "flow" or "shim" alongside its id and name. Running a shim on every keystroke is fine — it costs nothing and there is no rate limit. Debounce ~150ms and COALESCE: remember the latest text and run it when the current call finishes, so the answer matches what is on screen. Clear any in-flight guard on failure as well as success, or one call that doesn't come back wedges the interface. d.action is "act" | "suggest" | "refuse" — those three strings, nothing else. Branch on it rather than on a confidence threshold you invent; "refuse" means the shim doesn't recognise the input well enough to answer, so say so rather than showing a low-confidence guess. If you run a requestAnimationFrame loop, remove CSS transitions from any property it writes — the two fight and the property looks frozen. A flow answers in markdown: render it with el.replaceChildren(zw.markdown(text)). It builds DOM nodes, so model output is never treated as markup. STREAM chat answers: zw.flows.run(id, input, { onEvent: fn }) delivers the text token by token, and a flow that takes several seconds reads as broken without it. Use zw.textDelta(event) for each chunk — it returns null for anything that isn't text, so pass it every event — and accumulate. The promise still settles at the end with the whole result; take the final text from there. onEvent also sees node_start / node_complete / node_error if you want to name the step. Don't name a top-level variable history, name, status, length, origin or top: those are already window properties, so var history = [] leaves you with the browser's History object and history.push fails. Prefix it, or keep it inside a function. Style it plainly and legibly: a system font stack, generous spacing, one column unless there's a reason. It runs on phones too.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoFull replacement contents for `path`. Creates the file when it doesn't exist. Prefer `edits` on a file that already has something in it.
nameNo
pathNoWhich file to write. Defaults to index.html. Use lowercase names like app.js or style.css.
editsNoTargeted find/replace pairs, applied in order. All must match or none are applied.
archivedNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
deleteFileNoRemove `path` from the interface.
visibilityNoWho can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE.
descriptionNo
interfaceIdYesInterface id from napkin_interfaces_list.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only flag destructive=true; the description adds substantial operational context beyond that: edits fail loudly rather than clobbering, are atomic, preserve untargeted content, and index.html is undeletable. It further discloses the environment constraints (no build step, no libraries, blocked external scripts/fonts/images, 5 MB image cap) that determine whether a write will actually work.

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

Conciseness3/5

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

The write mechanics are correctly front-loaded, but the description runs far past what the tool does, embedding a full authoring manual (brand variables, shim/flow runtime semantics, streaming, even top-level variable naming). A large share of the text is reference material an agent only needs after the call succeeds, which dilutes scannability.

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

Completeness5/5

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

For a 10-parameter mutation tool with no output schema, the description leaves nothing critical unstated: it covers mode selection, atomicity, the file/asset environment, brand integration, and where to read current state before writing. An agent has everything needed to call it correctly on the first attempt.

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

Parameters4/5

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

Schema coverage is 70% and the description reinforces the key semantics: edits are exact find/replace against current text, body replaces the whole file and can create it, deleteFile removes path. It adds the dual-mode framing the schema only implies, though parameters like name, description, archived and workspace get no description-side elaboration.

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

Purpose5/5

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

Front sentence 'Write one file of an interface' gives a specific verb and resource, then immediately distinguishes the three write modes (edits, body, deleteFile). It also names the sibling to read first (napkin_interfaces_get), so an agent can place it in the workflow without opening any schema.

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

Usage Guidelines5/5

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

Explicit default guidance ('use `edits` ... the one to reach for by default'), a named exception for `body` ('a new file or a deliberate rewrite'), and a hard exclusion ('index.html can't be removed'). It also states the prerequisite (read with napkin_interfaces_get first) and warns edits match current text exactly.

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

napkin_layouts_listList slide layoutsA
Read-only
Inspect

Lists the slide layouts napkin_deck_compose can build from — the brand kit's own first, then the built-in ones — with when to use each and the slots it takes (needs must be filled; takes are optional). Every layout adapts to every size, fits its text, and uses the brand's colors, faces and logos; the logo fills itself in. Pick by what the slide has to say: one line (statement), a number (stat), a quote, a list (points, steps), an event, a carousel (cover, inner, closing), a picture (image-top, image-full, split, corner, product-shot), or a display ad (banner).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive, and the description adds real behavioral context: ordering (brand's own first, then built-ins), the needs-vs-takes slot contract, that layouts adapt to every size, auto-fit text, brand color/face/logo application, and self-filling logo. It stops short of describing output shape, but for a read-only list tool this is rich.

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

Conciseness4/5

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

Front-loaded with what the tool returns and the needs/takes distinction, then a scannable enumeration of layout families. Dense but every clause adds information; the long single paragraph is slightly heavy but not padded.

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

Completeness4/5

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

No output schema exists, so the description must carry return-value burden, and it does explain what each layout entry conveys (when to use, needs, takes) and the adaptive behavior. The layout-family list is illustrative rather than exhaustive, which is a minor gap.

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

Parameters3/5

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

Schema coverage is 100% for the single workspace parameter, so the schema already carries the semantics. The description adds nothing about the workspace argument, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('lists the slide layouts napkin_deck_compose can build from') and clarifies scope (brand kit first, then built-in). It is clearly distinguishable from siblings like napkin_deck_compose or napkin_slide_add, which consume rather than enumerate layouts.

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

Usage Guidelines4/5

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

Gives explicit selection guidance ('Pick by what the slide has to say') with a concrete mapping of content type to layout family. It implies this is a lookup step before composing, though it never explicitly states when NOT to call it or names an alternative.

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

napkin_sheets_add_chartPin a chart onto a sheetAInspect

Adds a LIVE chart to a sheet — its SQL re-runs against the tabs on every view, so it never goes stale. Write the query with napkin_sheets_query first to confirm the shape (first column = x axis, numeric columns = series, or set x/series explicitly). Prefer aggregated queries (GROUP BY) — a chart of raw rows is rarely the answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
sqlYesThe SELECT to chart.
typeYes
titleYesChart title.
seriesNo
sheetIdYesSheet id from napkin_sheets_list.
stackedNoStack the series (bar/area only).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) establish it as a non-destructive write; the description adds the critical behavioral fact that the chart is LIVE and its SQL re-runs on every view. It omits idempotency behavior (what happens when adding a duplicate chart) and error behavior on bad SQL, keeping it from a 5.

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

Conciseness5/5

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

Three sentences, front-loaded with the defining trait (LIVE chart), then the workflow prerequisite, then the best practice. No filler and every sentence carries distinct information.

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

Completeness4/5

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

For an 8-parameter write tool with no output schema and 63% coverage, the description covers the crucial query-authoring semantics and the live-query model. It leaves return value and duplicate-handling unaddressed, but the annotations carry the safety profile.

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

Parameters4/5

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

Despite 63% schema coverage, the description adds real meaning for the undocumented x/series mapping ('first column = x axis, numeric columns = series, or set x/series explicitly'). It does not clarify type, stacked, or workspace semantics, which the schema mostly handles.

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

Purpose4/5

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

States a specific verb and resource ('Adds a LIVE chart to a sheet') and the title reinforces it. It is clearly distinguishable from napkin_sheets_view_chart, though it never names a sibling explicitly, so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives a concrete workflow prerequisite ('Write the query with napkin_sheets_query first to confirm the shape') and a usage preference ('Prefer aggregated queries'). It lacks an explicit when-not-to-use or a named alternative for related tasks, so it is clear context without full routing guidance.

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

napkin_sheets_createCreate a Napkin sheetAInspect

Creates a Napkin sheet (multi-tab spreadsheet), optionally titled. Then populate it with napkin_sheets_set_cells (headers in row 1). Tell the user where it landed — the Sheets tab in Napkin.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already disclose a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the safety profile is covered. The description adds modest behavioral context ('optionally titled', 'Tell the user where it landed', the Sheets tab location) but says nothing about permissions/auth requirements or what the operation returns, which is the bulk of the remaining burden.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the purpose, then the next-step workflow, then the UX instruction. Each sentence earns its place with minimal waste.

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

Completeness3/5

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

There is no output schema, yet the description does not say what the call returns (e.g., a sheet reference/ID needed by set_cells), which the agent needs to chain the follow-up call. It covers the workflow and UX hint well but leaves the return value implicit, so it is adequate rather than complete.

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

Parameters3/5

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

Schema coverage is 50%: 'workspace' is fully documented in the schema (including token/API-key rules), while 'title' has no schema description. The description's 'optionally titled' compensates partially by signaling title is an optional label, but adds no format or constraint detail beyond that. Baseline 3 is appropriate given the schema carries half the load.

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

Purpose4/5

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

The description gives a precise verb+resource ('Creates a Napkin sheet') and usefully clarifies that a sheet is a 'multi-tab spreadsheet', preventing confusion with a single-tab concept. It is distinguishable from siblings like napkin_sheets_list/query/update by the create semantics, though the description never explicitly contrasts them, so the differentiation leans on the tool name.

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

Usage Guidelines4/5

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

It gives a clear follow-up workflow: 'Then populate it with napkin_sheets_set_cells (headers in row 1)', naming the alternative tool to use next and the convention for row 1. It provides clear context for the create-then-populate sequence, but stops short of explicit when-not-to-use or exclusion guidance.

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

napkin_sheets_listList Napkin sheetsA
Read-only
Inspect

Lists the workspace's Napkin sheets (multi-tab spreadsheets — the small-data surface) newest first with tab/chart counts. Archived sheets are hidden unless includeArchived; q narrows by title. Inspect one with napkin_sheets_schema, then query it with napkin_sheets_query.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoTitle contains (case-insensitive).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
includeArchivedNoAlso list archived sheets (default false).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint=false/destructiveHint=false, so safety is covered structurally. The description adds real context the annotations don't: newest-first ordering, default hiding of archived sheets, and the tab/chart counts returned. Return format detail (pagination, exact shape) is still absent.

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

Conciseness5/5

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

Three tight sentences with zero filler; the resource definition and default scoping come first, then the parameter effects, then the next-step routing. Every sentence earns its place.

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

Completeness4/5

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

For a read-only listing tool with full schema coverage and no output schema, the description supplies the return ordering and summary fields an agent would otherwise guess at, plus the workflow handoff to schema/query. Only pagination or result-size expectations are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in the schema, including the workspace-slug auth nuance. The description restates `includeArchived` and `q` behavior without adding syntax or format detail beyond the schema.

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

Purpose5/5

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

States a specific verb (Lists) and resource (the workspace's Napkin sheets), and even defines the resource ('multi-tab spreadsheets — the small-data surface'), distinguishing it from sibling surfaces like boards, docs, and diagrams. The sort order and returned summary fields (tab/chart counts) are front-loaded.

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

Usage Guidelines4/5

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

Gives explicit behavioral context ('Archived sheets are hidden unless `includeArchived`; `q` narrows by title') and names the follow-up path (napkin_sheets_schema to inspect, napkin_sheets_query to query). It lacks any explicit when-not-to-use guidance (e.g., vs search_workspace or napkin_docs_list), 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.

napkin_sheets_queryRun SQL against a sheetA
Read-only
Inspect

Runs a SQLite SELECT over a sheet's tabs-as-tables (get the table/column names from napkin_sheets_schema first). Full SQLite dialect: WHERE, GROUP BY, ORDER BY, JOINs across tabs, aggregates. Results cap at 200 rows. This is THE way to answer questions about a sheet's data — never eyeball cells when a query can answer precisely.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesA single SELECT.
sheetIdYesSheet id from napkin_sheets_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, but the description adds real behavioral context beyond them: the 200-row result cap and the full SQLite dialect surface (WHERE, GROUP BY, ORDER BY, JOINs, aggregates). It stops short of describing result shape or what happens when the cap truncates.

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

Conciseness4/5

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

Front-loaded with the core action and scope, followed by prerequisites, capability surface, and a limit. The final emphatic sentence is slightly editorial but does routing work, so it mostly earns its place.

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

Completeness4/5

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

For a query tool with no output schema, the definition covers input prerequisite, dialect capability, and the row cap. Column-level return shape and pagination/truncation behavior are unaddressed, but the referenced schema tool covers much of that gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented, including the workspace override rules and sheetId provenance. The description only reinforces that sql must be a SELECT, which the schema itself already states, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Runs a SQLite SELECT) and a specific resource abstraction (a sheet's tabs-as-tables), which is unambiguous and distinct from siblings like napkin_sheets_schema (discovery) and napkin_sheets_set_cells (mutation). An agent can select it without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the prerequisite tool ('get the table/column names from napkin_sheets_schema first') and an explicit when-to-use rule ('THE way to answer questions about a sheet's data — never eyeball cells'). Routing and exclusion are both handled.

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

napkin_sheets_schemaA sheet's SQL schemaA
Read-only
Inspect

Returns a sheet's tabs as SQL table definitions — CREATE TABLE scripts with row counts (each tab is a table; its header row names the columns; formula cells contribute computed values). Read this BEFORE writing a napkin_sheets_query so your SQL matches the real tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
sheetIdYesSheet id from napkin_sheets_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior about the returned content (row counts, header-row column naming, formula cells yielding computed values), which matters since there is no output schema. It stops short of noting auth/permission or size limits, so not a 5.

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

Conciseness5/5

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

Two sentences, zero filler, with the return shape front-loaded and the usage instruction placed second. Every clause carries information an agent needs.

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

Completeness5/5

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

With no output schema, the description correctly assumes the burden of explaining return content and does so precisely, while the 100%-covered input schema handles parameters. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (sheetId, workspace) are fully documented in the schema itself. The description adds nothing about parameter formats or constraints, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Returns a sheet's tabs as SQL table definitions') and immediately clarifies the shape of the result (CREATE TABLE scripts with row counts, header row naming columns, formula cells contributing computed values). An agent can distinguish it from napkin_sheets_query and napkin_sheets_list without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes usage: 'Read this BEFORE writing a napkin_sheets_query so your SQL matches the real tables.' It names the sibling it pairs with and the ordering condition that selects it, leaving nothing to inference.

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

napkin_sheets_set_cellsWrite cells into a sheet tabA
Destructive
Inspect

Sets cells in one tab of a sheet, by A1 address — values or formulas ('=SUM(B2:B9)'). Additive and surgical: only the addressed cells change. Check napkin_sheets_schema first so you know the tab names and where data ends; put headers in row 1 when creating a new region. To build a whole small table, write header cells + data cells in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellsYesA1 → raw value/formula, e.g. {"A1":"Region","B2":"=SUM(B3:B9)"}.
sheetIdYesSheet id from napkin_sheets_list.
tabNameNoTab name (defaults to the first tab).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, and the description adds meaningful scope: only the addressed cells are modified, which tells the agent the blast radius of a 'destructive' call. It does not describe the response or the needs_confirmation/approvalId flow, but that flow is documented in the schema.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and address format, followed by scoping behavior and workflow guidance. Every sentence earns its place with no filler.

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

Completeness4/5

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

For a 5-param write tool with no output schema, the description covers the action, addressing, blast radius, and prerequisite lookup. The main gap is the return shape (e.g., which cells were written), though annotations already carry the safety profile.

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

Parameters3/5

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

Schema description coverage is 100%: cells, sheetId, tabName, workspace, and approvalId are all documented in the schema, including the A1→value map, default tab behavior, and approval flow. The description reiterates the A1/formula format and adds a header-row convention, but the schema already carries the parameter burden, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Sets cells in one tab of a sheet'), names the addressing scheme (A1), and the accepted value types (raw values or formulas with an example). The 'additive and surgical: only the addressed cells change' line distinguishes it from bulk write siblings like napkin_sheets_update and napkin_sheets_create.

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

Usage Guidelines4/5

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

Gives concrete when-to-use context: call napkin_sheets_schema first to learn tab names and where data ends, put headers in row 1 for a new region, and use one call for a whole small table. It does not explicitly contrast with the sibling napkin_sheets_update, so routing between the two write tools still requires inference.

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

napkin_sheets_updateRename, describe, archive, or share a Napkin sheetA
Destructive
Inspect

Edits a sheet's details: title, description, visibility, or archived (true takes it out of the gallery; false brings it back — the recovery move for a sheet created by mistake or no longer wanted). Cells are edited with napkin_sheets_set_cells, not here. Sheet ids come from napkin_sheets_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
sheetIdYesSheet id from napkin_sheets_list.
archivedNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
visibilityNoWho can see it: PRIVATE (only the user), WORKSPACE (every member, the default), or SHARED (specific people, granted afterwards). Say 'make it private' → PRIVATE.
descriptionNoShort gallery summary.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is known. The description adds real behavioral context beyond that: archiving is reversible ('false brings it back') and removes the sheet from the gallery, which is exactly the kind of side-effect detail annotations cannot express. It does not clarify which specific edits are considered destructive.

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

Conciseness5/5

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

Three tightly packed sentences: purpose first, then the archive behavior, then the sibling exclusion and id provenance. No filler, no restatement of the title, and the most decision-relevant content is front-loaded.

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

Completeness4/5

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

For a 6-parameter mutation tool with no output schema, the description covers purpose, required-id source, the tricky archived flag, and sibling routing. It does not discuss authorization requirements (covered by the workspace parameter description in the schema) or what changes are irreversible, leaving a small gap.

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

Parameters4/5

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

Schema coverage is 67%, with the undocumented parameter being 'archived' — and the description compensates precisely there, explaining true/false semantics and the gallery removal effect. It also enumerates the other editable fields, adding marginal meaning over the already well-documented visibility enum and workspace slug.

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

Purpose5/5

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

Names a specific verb (edits) plus the exact editable fields (title, description, visibility, archived) on a specific resource (a Napkin sheet), and explicitly separates itself from napkin_sheets_set_cells. An agent can distinguish this tool from the ~55 siblings without opening a schema.

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

Usage Guidelines4/5

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

States the negative case clearly ('Cells are edited with napkin_sheets_set_cells, not here') and gives the source of required input ('Sheet ids come from napkin_sheets_list'). It also frames archived=false as the recovery path, which tells the agent when to reach for this tool; it stops short of spelling out when updating title vs visibility is appropriate.

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

napkin_sheets_view_chartView a sheet chartA
Read-only
Inspect

Renders one of a sheet's pinned charts against the LIVE data and returns the image so you can SEE it — the exact chart the user sees. The text part carries imageUrl; to show the user the chart inline in your reply, put a markdown image on its own line: ![<chart title>](imageUrl). Use after napkin_sheets_add_chart to confirm the chart reads well, or whenever the user asks about a chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
chartIdYesChart id (napkin_sheets_list shows chart counts; the sheet's charts carry ids).
sheetIdYesSheet id from napkin_sheets_list.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safe-read behavior is covered. The description adds genuinely new behavioral context: rendering happens against LIVE data and the text payload carries the imageUrl. It stops short of covering edge cases (missing chartId, rendering failures), so a 4 rather than 5.

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

Conciseness4/5

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

Two sentences plus a short inline-rendering instruction; the core action and the primary use case are front-loaded. The markdown-display sentence is longer than strictly necessary but earns its place by specifying exactly how to present the result to the user.

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

Completeness5/5

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

There is no output schema, so the description must explain what comes back — and it does, describing both the image return and the imageUrl in the text part. Combined with the usage and rendering guidance, an agent has everything needed to call and present the result correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter (chartId, sheetId, workspace) is documented in the schema itself including the workspace-token nuance. The description adds no parameter-level syntax or format detail beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — renders a sheet's pinned chart against live data and returns the image — with the scope ('one of a sheet's pinned charts') pinned down. This clearly separates it from napkin_sheets_add_chart and the other sheet tools without opening a schema.

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

Usage Guidelines5/5

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

Explicitly gives when to use it: 'after napkin_sheets_add_chart to confirm the chart reads well, or whenever the user asks about a chart.' It names the related sibling tool and the condition that selects this one, leaving nothing to inference.

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

napkin_slide_addAdd a slide to a deckAInspect

Appends one slide to an existing deck. Pick a layout (title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank), give the title, and optionally content — markdown for the layout's remaining text areas, split by --- lines (two-column/comparison take one block per column). Check the deck first with napkin_deck_outline.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoSlide title.
layoutYesLayout key: title | section | title-body | title-lead | two-column | three-column | comparison | statement | quote | closing | blank.
boardIdYesNapkin board id (a deck).
contentNoMarkdown body — blocks split on `---` lines.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, and the word "Appends" is consistent with an additive, non-destructive write. Beyond that, the description adds no auth/permission requirements, no note on what happens to existing slides, and no error/limit behavior, so it adds only modest behavioral context.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the action, then the layout/content rules, then the prerequisite. The inline enumeration of all eleven layout keys duplicates the schema's layout description verbatim, which is a minor waste of space.

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

Completeness4/5

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

For a 5-param additive write with no output schema, the description covers the required inputs (layout, boardId implied by "existing deck"), optional title/content, and a pre-flight check. It omits what the call returns (e.g., the new slide id) and the workspace-token nuance, which lives only in the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: how `content` maps onto each layout, the `---` block splitting, and that two-column/comparison take one block per column. That is semantics the schema's terse "Markdown body — blocks split on `---` lines" does not convey.

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

Purpose4/5

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

"Appends one slide to an existing deck" gives a specific verb (appends) and resource (slide within a deck), which is distinct from the sibling mutators napkin_slide_update and napkin_slide_fill. The behavior is clear, though it never names those siblings to explicitly disambiguate add-vs-fill-vs-update.

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

Usage Guidelines3/5

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

It provides one concrete workflow step — "Check the deck first with `napkin_deck_outline`" — but gives no guidance on when to use this versus napkin_slide_fill, napkin_slide_update, or napkin_deck_write/compose. Usage is implied rather than stated with alternatives or exclusions.

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

napkin_slide_fillFill a slide's empty text areasAInspect

Fills a slide's empty layout text areas by NAME — the names napkin_deck_outline surfaces as [empty text stub: "…"]. Pass texts mapping those exact names to content (markdown - bullets welcome). Read the outline first to see which stubs a slide still has open.

ParametersJSON Schema
NameRequiredDescriptionDefault
slideYes1-based slide number in presentation order.
textsYesPlaceholder name → content, e.g. {"Add a title": "Q3 Review"}.
boardIdYesNapkin board id (a deck).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false), so the burden is lower. The description adds useful context that it targets only *empty* areas and draws names from the outline, but omits what happens with mismatched/duplicate names, partial fills, or whether the operation is idempotent.

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

Conciseness5/5

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

Three tight sentences, verb front-loaded, with the name-linkage mechanism stated first and the outline-reading workflow last. No filler or redundancy.

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

Completeness4/5

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

For a 4-param mutation with a nested object and no output schema, the description covers purpose, input key provenance, and workflow start point adequately. Minor gap: no guidance on error/partial-fill behavior, but nothing essential to calling it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description nonetheless adds real meaning beyond the schema by specifying that `texts` keys must exactly match the stub names surfaced by `napkin_deck_outline` and that markdown bullet syntax is accepted — the schema only says 'Placeholder name → content'.

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

Purpose5/5

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

States a specific verb ('Fills') and resource ('a slide's empty layout text areas') with a precise mechanism ('by NAME'). It distinguishes itself from siblings by explicitly tying its input to what `napkin_deck_outline` surfaces, so an agent knows exactly what this does versus napkin_slide_update or napkin_deck_write.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite sequence: 'Read the outline first to see which stubs a slide still has open,' which routes the agent to the correct sibling. It doesn't state a when-not condition (e.g. what to do if the slide has no open stubs), so it stops short of the top bar.

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

napkin_slide_updateMove or change a deck slideA
Destructive
Inspect

Changes one slide as a whole: move it to another position in the deck (moveTo, 1-based — the other slides shift around it), hide it from the show without deleting it (skipped), show or hide its slide number (pageNumber), or replace its speaker notes (notes, markdown). Slide numbers come from napkin_deck_outline. To change what's ON the slide, use napkin_slide_fill or napkin_draw.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoSpeaker notes (markdown); replaces the current notes.
slideYes1-based slide number in presentation order.
moveToNoNew 1-based position for this slide.
boardIdYesNapkin board id (a deck).
skippedNotrue hides the slide from present mode and exports.
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
pageNumberNoShow the slide number on this slide.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds real behavioral context beyond them — skipped hides without deleting, moveTo causes other slides to shift, and notes replaces existing notes. It does not describe error behavior or whether moveTo/skipped can be combined in one call, so it stops short of a 5.

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

Conciseness5/5

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

Front-loaded with the verb and scope, then a tight enumeration of the four mutation modes, then two routing sentences. No filler; every clause maps to a parameter or a sibling tool.

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

Completeness4/5

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

For a 7-parameter mutation tool with no output schema, the description covers all operationally meaningful parameters and the destructive/visibility semantics. The only unaddressed item is the workspace parameter, which the schema already handles fully, so nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: moveTo is 1-based and other slides shift around the moved slide, and skipped affects present mode and exports. The workspace parameter is left entirely to the schema, which is acceptable given its detailed description there.

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

Purpose5/5

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

States a specific verb and resource ('Changes one slide as a whole') and then enumerates the exact scopes of change: position, visibility, slide number, speaker notes. It explicitly distinguishes itself from napkin_slide_fill and napkin_draw, so an agent can route correctly without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when/when-not routing: use this for whole-slide properties, use napkin_slide_fill or napkin_draw to change slide content, and use napkin_deck_outline to obtain slide numbers. Both the alternative and the condition that selects it are named.

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

napkin_slide_viewView one deck slide (rendered image)A
Read-only
Inspect

Renders a single slide of a Napkin deck to an image — exactly what present mode shows, cropped to the slide. Navigate by 1-based slide number in presentation order (get the map from napkin_deck_outline first; the result echoes slideIndex/slideCount so you can step through a deck slide by slide). Use this to check visual layout, drawings, and images that the text outline can't carry.

ParametersJSON Schema
NameRequiredDescriptionDefault
slideYes1-based slide number in presentation order.
boardIdYesNapkin board id (a deck).
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive=false, so safety is covered; the description adds the genuinely useful behavioral detail that output matches present mode and is cropped to the slide, plus that the response echoes slideIndex/slideCount to enable sequential stepping. It stops short of describing image format/resolution, but that is a minor gap.

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

Conciseness4/5

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

Front-loads the core action ('Renders a single slide... to an image') and packs navigation and use-case guidance into one tight paragraph with no filler. Slightly dense, but every clause earns its place.

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

Completeness4/5

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

No output schema exists, and the description compensates by noting the rendered image matches present mode and that the result echoes slideIndex/slideCount. Board/workspace scoping is left entirely to the schema, which is reasonable given 100% coverage.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds navigation semantics beyond the schema: 1-based indexing in presentation order and that the result echoes slideIndex/slideCount for stepping. It does not add much on boardId/workspace, which the schema already documents.

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

Purpose5/5

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

States a specific verb+resource ('Renders a single slide of a Napkin deck to an image') and scopes it precisely ('exactly what present mode shows, cropped to the slide'). An agent can distinguish it from napkin_deck_outline (text map) and napkin_deck_export without opening either schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: get the slide map from napkin_deck_outline first, then step through by slide number. States the use case ('check visual layout, drawings, and images that the text outline can't carry'), which is a clear when-to-use vs the outline sibling.

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

search_docsSearch ZeroWidth docsA
Read-only
Inspect

Search ZeroWidth product documentation. Returns matching pages with title, slug, public URL, and a query-relevant snippet. Use this when the user asks about a ZeroWidth product (Compass, Workbench, Caliper, Prism, Ledger, Napkin, zv1), an API behavior, or a policy. No authentication required — the docs corpus is public.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of results. Defaults to 10.
queryYesSearch query — keywords or natural-language phrase.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful non-annotation context: 'No authentication required — the docs corpus is public' and the shape of returned results (title, slug, public URL, snippet). It does not mention pagination or ordering, but it goes beyond the structured fields.

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

Conciseness5/5

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

The description is four short sentences, front-loaded with the core action, followed by return information, usage trigger, and auth note. Every sentence earns its place, and there is no repetition or filler.

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

Completeness4/5

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

For a two-parameter read-only search tool, the description covers purpose, return format, auth requirements, and usage triggers. It does not explain how this differs from search_workspace or list_docs/get_doc, and it lacks result-ordering or empty-result behavior, but it is otherwise sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters are documented in the schema itself. The description says the query returns a 'query-relevant snippet' but adds no syntax, format, or constraint details beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'Search ZeroWidth product documentation.' It also names the return fields and the product scope with concrete examples (Compass, Workbench, Caliper, etc.), which lets an agent distinguish it from siblings like list_docs, get_doc, and search_workspace without opening schemas.

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

Usage Guidelines4/5

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

It gives clear usage context: 'Use this when the user asks about a ZeroWidth product ..., an API behavior, or a policy.' However, it does not name alternative tools (search_workspace, list_docs, get_doc) or state when not to use this tool, so it stops short of explicit routing guidance.

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

search_workspaceSearch the whole workspaceA
Read-only
Inspect

Finds entities across every tool by name in one call — Workbench flows, Compass pages, Caliper datasets, evals, rubrics, reviews, specs and sources (apps sending agent traces), Ledger entries, Napkin sketches and decks. Use it FIRST when the user names something without saying where it lives ('the onboarding flow', 'that invoice page'); reach for a tool's own list only when you already know the tool. Each hit carries its id, kind, and workspace-relative path, so the id feeds the matching *_get tool and the path makes a link. Results only include what the user can see, and only kinds this token may read.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesCase-insensitive substring matched against names/titles.
kindsNoRestrict to these kinds (flow, page, dataset, eval, entry, board). Omit to search everything.
limitNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context beyond that: results are filtered to what the user can see and to kinds the token may read, and it discloses the hit shape (id, kind, workspace-relative path).

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

Conciseness5/5

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

Three dense, front-loaded sentences with no filler: purpose and coverage first, routing second, return/scope semantics last. Every clause carries information the agent can act on.

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

Completeness5/5

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

No output schema exists, so the description carries the return-value burden and does so by describing the id/kind/path tuple and how the id feeds *_get tools. Combined with the permission scoping note, an agent has everything needed to call and use this correctly.

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

Parameters3/5

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

Schema coverage is 75%, so most parameters are already documented structurally. The description reinforces name/title matching but adds no new syntax or format detail for kinds, limit, or workspace, so the baseline 3 is appropriate.

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

Purpose5/5

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

Opens with a specific verb (Finds) and resource (entities across every tool by name), then enumerates the concrete kinds covered (flows, pages, datasets, evals, rubrics, etc.). An agent can immediately distinguish this cross-tool search from the many per-tool list siblings.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('Use it FIRST when the user names something without saying where it lives'), gives concrete examples ('the onboarding flow'), and names the alternative plus its selection condition ('reach for a tool's own list only when you already know the tool'). This is textbook when/when-not/alternative routing.

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

workspace_files_save_from_chatSave a picture from this chat to your filesAInspect

Save a picture the user attached in THIS conversation to the workspace's files, in the Home folder "From chat", and get back its file id. Use it when the user wants a picture they sent you used somewhere — an interface shows it as (CSS: url(file:)). Pick the picture by name: the name in its [attached image: <name>] marker. Omit name only when the latest message with pictures has exactly one. Saving the same picture again returns the file it was already saved as. Only pictures from this conversation can be saved; a picture on a website can't be fetched, so ask the user to attach it here.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe picture's name, as in `[attached image: <name>]`.
workspaceNoWorkspace slug. Ignored when the workspace is already set for this chat.
approvalIdNoApproval id from a prior needs_confirmation response. Omit on the first call.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the description adds real context: idempotency ("Saving the same picture again returns the file it was already saved as"), the storage location, and the returned file id. It stops short of stating auth/permission needs or the confirmation flow, which the schema's approvalId only implies.

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

Conciseness4/5

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

A single dense, front-loaded paragraph that leads with the action and destination before qualifying conditions. Every sentence carries information, though the naming/omission rules and the idempotency note stack up enough that trimming could help.

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

Completeness5/5

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

For a 3-parameter write tool with no output schema, the description covers the action, destination folder, name-resolution rule, idempotent behavior, and return value (file id). Nothing an agent needs to invoke this correctly appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds selection logic the schema lacks: pick `name` from the `[attached image: <name>]` marker and omit it only when the latest picture-bearing message has exactly one image. It also implicitly frames `workspace` as optional-when-already-set, matching the schema.

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

Purpose5/5

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

States a specific verb+resource+destination: save a picture attached in THIS conversation into the workspace's "From chat" Home folder and return its file id. The scope (this conversation, attached pictures) is precise and easily distinguished from the surrounding napkin_* document/sheet tooling.

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

Usage Guidelines5/5

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

Explicitly names the trigger ("Use it when the user wants a picture they sent you used somewhere") and a hard exclusion ("Only pictures from this conversation can be saved; a picture on a website can't be fetched, so ask the user to attach it here"). It also tells the agent how to resolve the `name` argument and when it may be omitted.

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

Tool Schema Changelog

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

  1. 59 tool updates
    • First observedcomments_create
    • First observedcomments_list
    • First observedcomments_resolve
    • First observedentity_tags_browse
    • First observedentity_tags_get
    • First observedentity_tags_set
    • First observedget_doc
    • First observedlist_docs
    • First observednapkin_boards_create
    • First observednapkin_boards_get
    • First observednapkin_boards_list
    • First observednapkin_boards_update
    • First observednapkin_boards_view
    • First observednapkin_brand_add_files
    • First observednapkin_brand_apply
    • First observednapkin_brand_check
    • First observednapkin_brand_draft
    • First observednapkin_brand_examples
    • First observednapkin_brand_fonts
    • First observednapkin_brand_get
    • First observednapkin_brand_list
    • First observednapkin_brand_view
    • First observednapkin_deck_compose
    • First observednapkin_deck_export
    • First observednapkin_deck_outline
    • First observednapkin_deck_set_theme
    • First observednapkin_deck_write
    • First observednapkin_diagrams_create
    • First observednapkin_diagrams_get
    • First observednapkin_diagrams_list
    • First observednapkin_diagrams_update
    • First observednapkin_docs_create
    • First observednapkin_docs_get
    • First observednapkin_docs_list
    • First observednapkin_docs_update
    • First observednapkin_draw
    • First observednapkin_interfaces_create
    • First observednapkin_interfaces_get
    • First observednapkin_interfaces_grant
    • First observednapkin_interfaces_list
    • First observednapkin_interfaces_publish
    • First observednapkin_interfaces_view
    • First observednapkin_interfaces_write
    • First observednapkin_layouts_list
    • First observednapkin_sheets_add_chart
    • First observednapkin_sheets_create
    • First observednapkin_sheets_list
    • First observednapkin_sheets_query
    • First observednapkin_sheets_schema
    • First observednapkin_sheets_set_cells
    • First observednapkin_sheets_update
    • First observednapkin_sheets_view_chart
    • First observednapkin_slide_add
    • First observednapkin_slide_fill
    • First observednapkin_slide_update
    • First observednapkin_slide_view
    • First observedsearch_docs
    • First observedsearch_workspace
    • First observedworkspace_files_save_from_chat

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A shared whiteboard for you and your AI agent I wanted my AI agent and me to be able to point at the same thing. Any MCP-capable agent can read the canvas, draw on it, drop thought bubbles, animate elements, and react when you sketch something.
    1
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    Provides an agent-first note-taking system designed from the ground up for AI collaboration. Organizes your notes as a local vault of ordinary markdown files with semantic note types.
    28
    14 npm
    10
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to read and edit a spatial canvas board of notes, tasks and ideas through the running desktop app, creating, updating, linking, grouping and arranging nodes, importing files, focusing the view and undoing changes so edits appear instantly and stay reversible.
    25
    7 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources