Skip to main content
Glama

Server Details

Build, edit, preview and publish product catalogs and price lists from a merchant's store data.

Ownership verified
Status
Healthy
Uptime
63.1% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 36 tools

Disambiguation4/5

Most tools target clearly different resources or actions, and the descriptions explicitly route common confusions such as search_products vs pick_products, preview_catalog vs preview_page, and get_analytics vs show_analytics. However, the public surface includes panel-internal tools (pick_products_search, preview_page_image) and several closely related publish/preview/settings variants that could still invite misselection.

Naming Consistency5/5

Tool names consistently use snake_case with a verb-first pattern such as create_catalog, edit_catalog, list_catalog_shares, and sync_catalog_products. Even the internal and longer names follow the same convention without mixing camelCase or vague verbs.

Tool Count2/5

With 36 tools, the surface is heavy for a chat-driven workflow and includes internal panel-only helpers plus multiple preview, publish, and settings entry points. The broad catalog/product/analytics domain justifies some breadth, but the count exceeds a comfortable scoped set.

Completeness4/5

The set covers catalog lifecycle comprehensively: validation, creation, editing, duplication, publishing, PDF generation, previews, snapshots, embedding, and analytics, plus product import/search/update/delete/sync and image/template/lead handling. Minor gaps remain, notably no tools to add/remove/update catalog shares despite list_catalog_shares, and no image deletion.

Available Tools

36 tools
create_catalogCreate a catalogAInspect

Build a catalog from a DSL document: pages, product grids and which fields each product shows. The document needs a template, which supplies the design — without one the catalog has blank covers, no fonts or colours and plain product cells. The template is the merchant's choice (list_templates shows them): a call without one creates nothing and answers requiresTemplateChoice with the choices. A wholesale document (usage: "wholesale" — a line sheet is a wholesale catalog) also needs wholesaleDiscountPercent, the percentage off the regular price the merchant gives wholesale buyers, 0 when there is none; it is the merchant's figure, and without it nothing is created either (requiresWholesaleDiscount). The grammar is foldsquare://schemas/catalog-dsl.json. Products are selected by collection, by id or by search; list_collections and search_products resolve the names a merchant uses into ids. An answer with valid: false lists issues that say exactly what to change. On success, catalog.editorUrl opens what was built — the only link that works before the catalog is published; viewerUrl is null until then.

NameRequiredDescriptionDefault
documentYesA foldsquare.catalog/v1 document
idempotencyKeyNoAny string unique to this build; a retry with the same key returns the first result instead of creating a second catalog
withoutTemplateNotrue builds an undesigned catalog, for a merchant who has seen the templates and wants none.

Output Schema

NameRequiredDescription
issuesNo
catalogNoThe catalog built, when created
createdYes
missingNoWhat the merchant still has to decide
summaryNo
replayedNoA retry with the same idempotencyKey: the first result, not a second catalog
templatesNo
schemaIssuesNo
tellTheMerchantNoWarnings on a successful build, to relay
requiresTemplateChoiceNoNothing was built: the merchant must pick one of `templates`
requiresWholesaleDiscountNoNothing was built: the merchant must give their wholesale discount

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false); the description adds the failure modes the agent cannot see elsewhere — a call without a template creates nothing and returns requiresTemplateChoice, a wholesale document without a discount returns requiresWholesaleDiscount, and validation failures come back as valid: false with actionable issues. It also explains the post-creation link semantics, which no annotation covers.

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 purpose and generally dense with information, but delivered as one long semicolon-linked paragraph with some restatement ('The template is the merchant's choice' / 'it is the merchant's figure'). Structuring the two hard requirements as separate sentences or bullets would improve scanability.

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?

An output schema exists, yet the description still adds the non-obvious fact that `viewerUrl` is null until publishing and `editorUrl` is the only working link — behavioral, not structural, information. Combined with the grammar pointer, the required-field conditions and the error-answer shape, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is 100% and the `document` object is free-form, so the description's explanation of its internals (template, usage: "wholesale", wholesaleDiscountPercent, product selection by collection/id/search) is the only real specification available, plus the grammar URI. It stops short of covering `idempotencyKey` and the `withoutTemplate` escape hatch, which live only in 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 ('Build a catalog from a DSL document') and immediately enumerates what the document produces (pages, product grids, per-product fields). An agent can distinguish this from edit_catalog/update_catalog/duplicate_catalog by the name plus the 'build from document' framing.

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 prerequisites (a `template` is required; wholesale documents additionally require `wholesaleDiscountPercent`) and routes sub-lookups to list_templates, list_collections and search_products. It does not state when to prefer this over edit_catalog or duplicate_catalog, which is the one remaining routing gap.

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

delete_catalogDelete a catalogA
DestructiveIdempotent
Inspect

Delete one of the merchant's catalogs. It leaves their list at once, its public link stops working, these tools cannot reach it afterwards, and the plan slot it used is freed. Destructive, so it runs only on a call with confirm: true; without it nothing is deleted and the answer lists what would go under requiresConfirmation, for the merchant to approve. Only the owner can delete — a catalog shared with the merchant is refused.

NameRequiredDescriptionDefault
confirmNotrue once the merchant has agreed to the deletion listed under requiresConfirmation
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
titleNo
appliedYes
catalogNoWhat would be deleted, while waiting for confirmation
deletedNo
catalogIdNo
confirmWithNoThe arguments that carry the change out once the merchant agrees
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint and idempotentHint, but the description goes further: it discloses effects (public link stops working, tools lose access, plan slot freed), the confirmation gate, and the authorization constraint. This is exactly the consequence-level detail an agent needs before an irreversible 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?

Front-loaded with the action, and every clause carries real information. The long compound sentence about the catalog's disappearance is slightly awkward ("these tools cannot reach it afterwards") but earns its place through consequence detail.

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

Completeness5/5

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

For a destructive two-param tool, everything an agent needs is present: effect list, confirmation workflow, and ownership restriction. An output schema exists, so the absence of return-value documentation is not a 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 100%, so the schema already documents both params. The description nonetheless adds workflow meaning to confirm — it is the second leg of a dry-run approval cycle, with the pre-confirm output surfaced as requiresConfirmation — which the schema description alone only hints at.

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 and resource ("Delete one of the merchant's catalogs"), which cleanly separates it from siblings like delete_products and edit_catalog. An agent knows immediately this permanently removes a catalog object.

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 two-phase protocol: it only runs with confirm: true, and without it nothing is deleted and the response lists candidates under requiresConfirmation. It also names the exclusion — shared catalogs are refused, only the owner can delete — so the agent knows when not to call it.

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

delete_productsDelete products held in FoldsquareA
DestructiveIdempotent
Inspect

Remove products the merchant keeps in Foldsquare. Store products are never touched, and catalogs keep their own copies of the tiles. Destructive, so it runs only on a call with confirm: true; without it nothing is deleted and the answer lists what would go under requiresConfirmation, for the merchant to approve.

NameRequiredDescriptionDefault
confirmNotrue once the merchant has agreed to the deletion listed under requiresConfirmation
productIdsYesIds as search_products reports them, or skus

Output Schema

NameRequiredDescription
noteNo
appliedNo
deletedNoHow many products were removed
notFoundYesIds that are not products held in Foldsquare
productsNo
confirmWithNo
requiresConfirmationNoPresent when nothing was deleted: the products to show the merchant before calling again with confirm: true

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds the crucial two-phase contract: without confirm nothing is deleted and the response enumerates targets under requiresConfirmation. It also discloses blast-radius limits (store products untouched, catalogs keep their own tile copies), which is exactly the 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.

Conciseness5/5

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

Three sentences, each load-bearing: scope, side-effect boundary, then the confirmation protocol. The safety-critical constraint is front-loaded in sentence three before any invocation risk.

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?

An output schema exists so return values needn't be fully described, yet the description still explains the one response branch that governs agent behavior (the requiresConfirmation preview). For a two-parameter destructive tool, nothing an agent needs to call it safely 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 baseline is 3, but the description earns above baseline by explaining confirm as the approval gate tied to the requiresConfirmation list rather than just a boolean flag. productIds semantics beyond 'ids as search_products reports them, or skus' are left to 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 (remove) and a precisely scoped resource (products held in Foldsquare), and immediately bounds it against what is not affected: store products and catalog copies of tiles. An agent can distinguish this from delete_catalog or update_product 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 a clear operational rule: it only proceeds on a call with confirm: true, and without it the answer is a would-delete preview for merchant approval. It does not name sibling alternatives (e.g. delete_catalog) for contrast, so it stops short of explicit when-to-use vs which-tool guidance.

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

duplicate_catalogDuplicate a catalogAInspect

Make a copy of a catalog — pages, products, design and block library — as a new draft with its own link, for a new season or a variant. Named " (Copy)" unless a title is given. The copy is unpublished whatever the original is. Returns the copy's summary with its editorUrl.

NameRequiredDescriptionDefault
titleNoA title for the copy
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
catalogYesThe copy, a draft
duplicatedYes

TDQS

A4.7/5.0
Behavior5/5

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

Adds real behavior beyond the annotations: the default title pattern, the critical rule that the copy is always unpublished regardless of the original's state, and that it returns the copy's summary with an editorUrl. The 'always draft / unpublished' caveat is the kind of state consequence an agent can't infer from readOnlyHint=false and destructiveHint=false.

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 what gets copied, then the naming rule, then the state caveat and return value. 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?

A creation tool with an output schema already covering returns; the description still supplies the two things an agent most needs — what is duplicated and the unpublished state of the result. Nothing essential 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 baseline is 3, and the description goes further by explaining the optional title's effect (overrides the '<title> (Copy)' default). catalogId is left to the schema, which is fine since it already points at list_catalogs.

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 (copy) plus resource (catalog) and an enumeration of what is carried over (pages, products, design, block library). It's clearly distinct from create_catalog, which would make an empty catalog, and from update_catalog/edit_catalog.

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 intended scenarios ('for a new season or a variant'), which implies when this beats create_catalog from scratch. It does not explicitly name an alternative or say when not to use it, so not a 5.

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

edit_catalogEdit a catalogA
Destructive
Inspect

Apply targeted changes to an existing catalog: addProducts, removeProduct, addPage, removePage, setGrid, reorderPages, setCategory, editProduct, addBlock, editBlock, removeBlock, setProductCellStyle, setHeader, setFooter, setPageStyle. EVERY edit here is scoped to THIS CATALOG, never to the merchant's store: editProduct changes the title, price, sku, description, vendor or image as this catalog shows them, and the store keeps its own values — so a price or title changed "in the catalog" is editProduct, with no change in the store needed. A value edited this way is kept on later syncs, because it is treated as the merchant's deliberate wording rather than stale data. foldsquare://schemas/catalog-edit-ops.json lists exactly which fields each op accepts. Text on a page, and header/footer text, may carry dynamic fields written bare in the html — {{shop.name}}, {{shop.url}}, {{shop.email}}, {{shop.phone}}, {{shop.address}}, {{page.number}}, {{page.category}}, {{general.current_year}} — and they are stored as live fields, updated wherever the catalog is shown. Product fields belong in the tiles, through a details block. Page blocks — cover headings, shapes, pictures — are listed by get_catalog under blocks with ids such as "p1-text-2" whether or not the template gave them a key; editBlock changes one through its html, which carries its styling. THE LISTING DESIGN — what a merchant sees inside every product tile (the photo region, the title, "Product Code:", the price box, the description) — is reported by get_catalog under productCell.blocks, each with an id such as "photos-1", "details-2" or "shp-…", and changed with editBlock and that id: lines for a details block (text and product fields with sizes, rather than html), photos for the photo region (layout, fit, thumbnails), fill for a shape, style for a block's background or border. Font sizes are px at PRINT resolution, not web sizes; get_catalog reports the sizes the design already uses. addBlock with inProductCells: true adds a block to the tiles; removeBlock takes one away. A design edit lands on EVERY tile that renders the design, so it shows throughout the catalog; productId limits it to one product's tile, which then stops following the catalog design. Positions inside a tile are percentages of the tile: at.area, at.relativeToBlock with a sibling block id, or an explicit at.box. setProductCellStyle styles the tiles themselves (border, background, padding). Which fields a tile shows changes through its details block (editBlock with lines); setFields is retired and always refused. Edits touch only what they name, so work the merchant did in the visual editor survives — but an editor tab open during the edit overwrites it on its next autosave unless it is reloaded. Page indexes come from get_catalog's pages (zero-based; not positions in document.pages), product ids from its document, block ids from blocks and productCell. A CUSTOM GRID — any number of product tiles across and down, within 10 x 50, as the editor's grid panel allows; the template sets how tiles look, not how many fit on a page — is setGrid, on any page: on a products page it re-lays-out the products; on a page with no products yet it lays out that grid of empty slots for addProducts with that page to fill; and a blank page, a cover or any other kind of page simply becomes a products page with that grid (what was on it is removed, which the confirmation says) — never refuse a grid because of the kind of page it is asked for. A NEW page on a custom grid is addPage { kind: "products", grid } followed by addProducts with its page. Operations that re-lay-out or delete a page are applied only with confirm: true; without it nothing changes and the answer lists the consequences under requiresConfirmation, for the merchant to approve. Results name a page as "page 6 (index 5)": the index is for the next op, the page number is what to say to the merchant. The first edit of a catalog in a while returns livePreviewUrl, a page that reloads by itself as edits land; the edits that follow do not repeat it.

NameRequiredDescriptionDefault
opsYesPatch operations, applied in order. Each is { op, ...arguments }. A rebuild discards everything the merchant changed in the editor; these ops keep it. A WHOLE COLLECTION is ONE op: { op: "addProducts", collectionId: <id> }. The server resolves the products, names the run after the collection and starts it on a new page at the end, matching the grid and blocks of the runs already there. The same built out of addPage + setCategory + setGrid + addProducts needs page numbers computed by hand, and a wrong one renames an existing collection's pages instead of the new ones. A hand-picked selection rather than a whole collection is `productIds`, with `category` set to name it. A run added from a collection is LINKED to it: get_catalog reports its `collectionId`, and `removeProduct` takes an optional `collectionId` to remove from that run only. `setCategory` renames a page's collection label, `editProduct` changes what one product shows, and `addBlock`/`editBlock`/`removeBlock` place text, image and shape blocks on a page — positioned by a named page area ("bottom-left") or against a product ({ relativeTo: <productId>, side: "below" }) — or, with `inProductCells` / a listing-design block id from get_catalog's `productCell`, inside every product tile. `setHeader`/`setFooter` change the running header and footer text — catalog-wide by default, or `scope: <pageIndex>` for one page; `visible` shows or hides it without changing what it says, and `inherit: true` puts a page back on the catalog default. Block ids and the current header/footer html come from get_catalog.
confirmNotrue applies a re-layout or deletion that an earlier answer listed under requiresConfirmation.
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
appliedYes
changesNoWhat each op did
warningsNo
confirmWithNoThe arguments that carry the change out once the merchant agrees
schemaIssuesNoMalformed ops; nothing was applied
livePreviewUrlNoOn the first edit in a while: a page that reloads as edits land
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only give readOnly=false, destructive=true, idempotent=false; the description goes far beyond by naming what is destroyed (setGrid on a blank/cover page removes what was on it), that destructive ops require confirm:true and otherwise return requiresConfirmation, that an open editor tab overwrites the edit on its next autosave, and that only named fields are touched while catalog-scoped edits survive later syncs. It also discloses the first-edit-only `livePreviewUrl` return behavior, which annotations cannot convey.

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 op list is appropriately front-loaded, but what follows is a single dense block of prose mixing the store-vs-catalog boundary, dynamic fields, block ids, grid rules, confirmation, and preview URLs with no internal structure. Nearly every sentence carries real information, yet the all-caps emphasis scattered mid-paragraph and the sheer length make it harder to scan than it needs to be.

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 destructive multi-op patch tool, the definition covers the gaps an agent would otherwise hit: page index vs. displayed page number ('page 6 (index 5)'), grid bounds (10 x 50), collection-linked runs and removeProduct by collectionId, header/footer scoping, and confirmation semantics. With an output schema present, it correctly stops short of explaining return shapes beyond the one non-obvious field (livePreviewUrl).

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% and the ops schema already carries heavy prose, so the baseline is 3; the description still adds meaning the schema does not duplicate cleanly, such as `productId` limiting a design edit to one tile that 'then stops following the catalog design', `at.area`/`at.relativeToBlock`/`at.box` being percentages of the tile, and `inProductCells: true` adding a block to every tile. It also points to foldsquare://schemas/catalog-edit-ops.json for per-op field lists rather than restating them, which is a useful pointer but leaves per-op argument semantics delegated.

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 and resource ('Apply targeted changes to an existing catalog') and then enumerates the full op vocabulary (addProducts, setGrid, editBlock, etc.), so an agent knows exactly what surface this tool covers. It also draws a sharp boundary that no sibling covers: 'EVERY edit here is scoped to THIS CATALOG, never to the merchant's store,' which distinguishes it from update_product and update_catalog.

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-use routing: which fields a tile shows changes through editBlock with `lines` and '`setFields` is retired and always refused'; a custom grid is always `setGrid` and 'never refuse a grid because of the kind of page it is asked for'; a new grid page is addPage followed by addProducts. It also states the prerequisite for ids ('Page indexes come from get_catalog's `pages` ... block ids from `blocks` and `productCell`') and the confirm:true gate for re-layout/deletion.

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

embed_catalog_in_storeEmbed the catalog in a store pageA
Idempotent
Inspect

Put a published catalog on a page of the merchant's own Shopify or WooCommerce store, as the Publish dialog's store tab does. With only catalogId it lists the store's pages, which ones already embed a catalog, and their links. With pageId (one of those pages) or newPageTitle (a new page), the store is changed only on a call with confirm: true; without it nothing changes and the answer lists, under requiresConfirmation, the catalog, the store page and the public link, for the merchant to approve — with confirmWith holding the arguments that carry it out. width and height size the embed (defaults 100% and 800). A draft is refused, since an embedded draft shows nothing. Owner only.

NameRequiredDescriptionDefault
widthNoe.g. "100%" or "800px"
heightNoe.g. "800" or "600px"
pageIdNoA page id from the listing
confirmNotrue once the merchant has agreed to change their store
catalogIdYesCatalog id, as returned by list_catalogs
newPageTitleNoCreates a new store page with this title

Output Schema

NameRequiredDescription
pageNoThe store page now showing the catalog
pagesNoThe store's pages, when called with only catalogId
appliedNo
catalogNo
embeddedNo
platformYes
storePageNoThe page that would change, while waiting for confirmation
confirmWithNoThe arguments that carry the change out once the merchant agrees
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and openWorldHint=true; the description goes much further by disclosing the write gating on confirm, the dry-run listing returned under requiresConfirmation, the confirmWith pass-through arguments, the draft refusal, and the owner-only permission requirement. It discloses what changes and what does not on each 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?

Front-loaded with the purpose, then modes, then confirmation flow, then defaults and constraints. Sentences are dense with em-dash asides; every clause carries substance, though the single long middle sentence could be split for readability.

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?

Despite an output schema existing, the description explains the key return shapes (page listing, requiresConfirmation, confirmWith), which the agent needs to drive the confirmation loop. Combined with the mutation gating and permission notes, nothing essential is missing for a 6-parameter write tool.

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

Parameters5/5

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

Even with 100% schema coverage, the description adds meaning the schema lacks: width/height defaults (100% and 800), that pageId must come from the listing, that newPageTitle creates a page, and the exact semantics of confirm plus the returned confirmWith. This is real added value beyond field descriptions.

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

Purpose5/5

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

States a specific verb and resource ('Put a published catalog on a page of the merchant's own Shopify or WooCommerce store') and anchors it to a known surface ('as the Publish dialog's store tab does'). It is clearly distinguishable from siblings like publish_catalog and open_publish_settings, which do not touch store pages.

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 defines the three mode branches: catalogId alone lists pages, pageId or newPageTitle performs an embed, and confirm: true is required to actually mutate the store. It also states exclusions ('A draft is refused') and the owner-only restriction, 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.

get_analyticsHow the catalogs are doingA
Read-only
Inspect

The analytics the app shows: views, unique visitors and product clicks over a period, with a time series. Without catalogId: the account-wide overview, plus top catalogs, referrers, countries, devices and browsers. With one: that catalog's detail — page heatmap and top products where the plan includes them — and live, the visitors of the last five minutes. Referrers, countries and devices are reported account-wide only. Needs a plan with analytics; without one the answer says so.

NameRequiredDescriptionDefault
toNoISO date, with period "custom"; default now
fromNoISO date, with period "custom"
periodNo7d, 30d, 90d, 1y, all, or custom with from/to30d
catalogIdNoOne catalog, as returned by list_catalogs; omit for the overview

Output Schema

NameRequiredDescription
periodYes
summaryYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds substantial context beyond them: which metrics are only available account-wide, that the heatmap and top products depend on plan tier, and that `live` returns the last five minutes. It also discloses the failure behavior when the plan lacks analytics — exactly the kind of thing an agent needs before calling.

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?

Dense but well front-loaded: the metric set comes first, then the branch on `catalogId`, then the plan prerequisite. Every sentence carries information, though the run-on em-dash construction of the middle sentences makes it slightly harder to scan than a bulleted branch would be.

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 an output schema present, return values need not be spelled out, yet the description still sketches the response shape for both modes. Combined with the plan gating, account-wide-only caveat and `live` semantics, an agent has everything needed to pick parameters and interpret the result.

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; the description earns an extra point by explaining the consequence of `catalogId` (overview vs. catalog detail, heatmap, top products, live) rather than just naming the field. It adds only light context for `period`/`from`/`to` beyond the schema's own enum and date-format documentation, which already handles those.

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 concrete verb and resource — analytics (views, unique visitors, product clicks, time series) over a period — so the agent knows exactly what data comes back. However, it never distinguishes itself from the near-identically named sibling `show_analytics`, leaving the agent to guess which one to call.

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 conditional guidance tied to `catalogId`: omit it for the account-wide overview with top catalogs/referrers/countries/devices/browsers, supply it for per-catalog detail, heatmap, top products and `live`. It also flags the prerequisite (a plan with analytics, with a graceful in-band failure message). The one gap is that it offers no guidance versus the `show_analytics` sibling.

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

get_catalogRead a catalogA
Read-only
Inspect

Return an existing catalog as a DSL document — its pages, grids and the product ids on every page — plus pages: EVERY real page with the zero-based index that edit_catalog ops take, its kind, collection label and what is on it. Page indexes are the ones in pages, not positions in document.pages: the document folds a collection that spills over several pages into one entry, so it can be shorter than the catalog. Also blocks (EVERY content block on each page, keyed or not, with ids such as "p1-text-2" and the html a text block holds), chrome (header, footer and page styling) and productCell: the listing design every product tile renders, as blocks with ids (photos, details text with its fields and sizes, shapes), where it lives (how many tiles inherit the catalog default versus carrying their own), and which products deviate. It is where edit_catalog's indexes and ids come from; the catalog id comes from list_catalogs. Anything the DSL cannot express is listed under unsupported rather than omitted.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
pagesYesEvery real page, with the index edit_catalog ops take
blocksNoThe content blocks on each page, with their ids
chromeNoHeader, footer and page styling
designNoTitle, page size, price format and branding, as update_catalog changes them
documentYesThe catalog as a foldsquare.catalog/v1 document
catalogIdYes
productCellNoThe listing design every product tile renders, as blocks with ids
unsupportedNoWhat the document cannot express

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare a safe read-only, non-destructive, closed-world operation, and the description adds substantial behavioral detail beyond that: the distinction between `pages` indexes and `document.pages` positions, the folding behavior for multi-page collections, and that unsupported DSL content is listed under `unsupported` rather than omitted.

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 core return value and every major clause carries useful information about the response shape. It is dense and somewhat run-on, but the density is largely justified by the complexity of the returned catalog structure.

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

Completeness5/5

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

Given a read-only tool with full annotation coverage, a fully described one-parameter schema, and an output schema, the description is complete enough to call it correctly. It covers the key return components, the crucial page-index caveat, ID provenance, and unsupported content handling.

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 single catalogId parameter is already documented. The description adds useful provenance by stating that the catalog id comes from list_catalogs, though it adds no further format or constraint details beyond the schema.

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

Purpose5/5

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

The description uses a specific verb and resource: it returns an existing catalog as a DSL document and enumerates the pages, blocks, chrome, and productCell data included. It clearly distinguishes this read operation from edit_catalog by explaining that its page indexes and ids are the source for edit_catalog operations.

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 by saying the catalog id comes from list_catalogs and that this tool supplies the indexes and ids used by edit_catalog. It does not explicitly exclude alternatives such as preview_catalog or get_catalog_pdf, but the primary when-to-use guidance is strong.

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

get_catalog_pdfThe catalog as a PDFAInspect

A download link for the catalog as a PDF, draft or published. The stored PDF comes back at once when it is newer than the last change; otherwise a render starts — compressed by default, pdfFormat: "print" for press quality — and the link comes back when it finishes within about twenty seconds. state is "ready" (with downloadUrl), "rendering" (with jobId), "failed" (with reason) or "not_configured". "rendering" is not a failure — a large catalog takes a few minutes — and a call with that jobId returns the link once the render is done.

NameRequiredDescriptionDefault
jobIdNoFrom an earlier answer with state "rendering"
catalogIdYesCatalog id, as returned by list_catalogs
pdfFormatNoForces a fresh render in that format

Output Schema

NameRequiredDescription
jobIdNoWith "rendering": call again with it to collect the PDF
stateYes
titleYes
cachedNoThe stored PDF, newer than the last change
reasonNo
catalogIdYes
downloadUrlNoWith "ready"
generatedAtNo

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the caching rule (stored PDF returned when newer than last change), the ~20 second sync threshold, the full four-value `state` machine with what accompanies each state, and the explicit warning that "rendering" is not a failure and large catalogs take minutes. This is exactly the behavioral context the annotations (readOnly=false, destructive=false) leave unstated.

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 outcome (a download link) before the mechanics, and every sentence carries information an agent would otherwise get wrong. The dense em-dash stacking makes it slightly harder to parse at a glance, keeping it off a 5.

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 three-parameter tool with an output schema, the description covers everything an agent needs: trigger semantics, default format, async polling, and the non-failure "rendering" state. No material gap remains.

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 real meaning: `pdfFormat` is compressed by default and "print" is for press quality, and `jobId` is tied to polling a prior "rendering" response. Only `catalogId` is left to the schema.

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 (download/get link) and resource (catalog rendered as PDF), plus the scope of draft vs published catalogs. It does not name or distinguish itself from adjacent siblings such as preview_catalog or preview_page_image, so an agent must infer which of the rendering tools to pick.

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 operational guidance: it explains that a cached PDF returns immediately, that a render otherwise starts, and that a follow-up call with `jobId` retrieves the link when the render finishes. It stops short of naming alternatives or stating when-not to use it, so it is context-rich but not fully routing.

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

get_productGet one productA
Read-only
Inspect

Look up a single product in full, by exactly one of productId, sku or handle. productId is the reliable lookup; SKU and handle are resolved by searching, which is slower and can match more than one product. A result with found: false and exhaustive: false means the search gave up before covering the catalogue, which is NOT the same as the product not existing.

NameRequiredDescriptionDefault
skuNoLook up by SKU. May match a variant rather than a product — the result says which.
handleNoLook up by URL handle/slug. Only Shopify and Wix products have one.
sourceNoSame meaning as in search_products.
productIdNoThe id exactly as search_products returned it. The reliable lookup.
includeVariantsNoInclude the full variant list (default false). Fifty variants is a lot of text.

Output Schema

NameRequiredDescription
noteNo
foundYes
sourceNo
productYesThe product in full, with images and (on request) variants
ambiguousYesEvery match, when more than one product matched
matchedByNo
exhaustiveNofalse with found: false means the search gave up, not that the product is absent
matchedVariantNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly and non-destructive, so safety is covered. The description adds genuinely non-obvious behavior: the found:false / exhaustive:false combination does not mean the product is absent, and SKU lookups may resolve to a variant rather than a product — semantics an agent could easily misread from the output schema alone.

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, each doing work: the operation, the parameter hierarchy, and the failure-mode caveat. Front-loaded and free of filler, with only minor overlap between the SKU/handle sentence and the schema descriptions.

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 an output schema and read-only annotations already present, the description supplies what structured fields cannot: the exclusivity rule and the interpretation of the ambiguous found/exhaustive result pair. The one gap is that the 'source' parameter is delegated entirely to search_products rather than described here.

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 all five parameters are already documented, including the source enum and includeVariants default. The description's one real addition is the implicit 'exactly one of' exclusivity constraint, which the schema does not encode (no oneOf), but the rest restates schema 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?

Opens with a specific verb and resource ('Look up a single product in full') and immediately constrains the scope to exactly one of three lookup keys. It is clearly distinct from search_products, which it references as the underlying mechanism for SKU/handle resolution.

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 actionable selection guidance among the three lookup parameters, explicitly recommending productId as the reliable path and flagging SKU/handle as slower, possibly many-to-one lookups. It stops short of stating when to prefer search_products first or when this tool should not be used.

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

get_publish_optionsHow a catalog is publishedA
Read-only
Inspect

Everything the Publish dialog controls, as it stands: published or draft, the custom URL, what a product click does, auto-sync, the customer lead form, password protection (whether one is set — never the password), search-engine visibility, and the viewer's look and buttons; plus the share link, the embed code and the editor and live-preview links. locked lists what the merchant's plan or store does not allow, each with its reason. For before set_publish_options, and for questions about how the catalog is shared or whether it is live. Reads the catalog and changes nothing.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
titleYes
lockedYesOptions the plan or store does not allow, each with its reason
statusYes
optionsYesEvery Publish dialog option, as set_publish_options takes them
catalogIdYes
editorUrlYes
embedCodeYes
publishedYes
shareLinkYes
viewerUrlYes
livePreviewUrlYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark it read-only and non-destructive, but the description adds meaningful context: it never returns the password itself, and `locked` explains plan/store restrictions with reasons. The closing 'Reads the catalog and changes nothing' reinforces the safety profile without contradicting annotations.

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 opening clause is front-loaded and the sentence is dense but purposeful, enumerating the fields the agent will receive. It is slightly laundry-list-like, but the length is justified by the breadth of the returned settings.

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?

An output schema exists, so the description need not define return shape, yet it still summarizes the substantive fields and explains the special `locked` list. Combined with the usage guidance and read-only assurance, an agent has everything needed to call 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?

There is only one parameter, and the schema fully documents catalogId as coming from list_catalogs. The description adds no further syntax or format details about the identifier, so baseline 3 applies when schema coverage is 100%.

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 read operation and enumerates exactly what it returns: publish state, custom URL, click behavior, auto-sync, lead form, password status, SEO visibility, viewer styling, share link, embed code, and editor/live-preview links. This is far more specific than the title and clearly distinguishes it from set_publish_options and open_publish_settings.

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 explicitly says to use this before set_publish_options and for questions about sharing or whether the catalog is live, which gives the agent a concrete trigger. It does not explicitly exclude alternatives such as get_catalog or open_publish_settings, 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.

import_productsImport productsA
Destructive
Inspect

Store products in Foldsquare so they can be put in a catalog. It takes products already in the standard shape — foldsquare://schemas/product-import.json describes it. There is no server-side parser: a spreadsheet, CSV or plain list arrives converted into that shape, which is what lets any column naming or export dialect work. Only title is required. id (or failing that sku) is what identifies the product afterwards. Products that cannot be stored are reported individually and the rest still land. On a connected store these are found with search_products source: "foldsquare" — they are not in the store, so the default search does not see them. A product with the same id (or sku) as one already held is UPDATED with the fields given rather than duplicated; onExisting: "skip" leaves such rows as they are.

NameRequiredDescriptionDefault
productsYesProducts in the standard import shape
onExistingNoWhat to do with a product already held under the same id: update it (default) or skip it
idempotencyKeyNoAny string unique to this import; a retry with the same key returns the first result instead of importing again

Output Schema

NameRequiredDescription
createdNo
skippedNo
updatedNo
importedYes
productsNo
rejectedYesRows not stored, each with why; the rest still landed
replayedNo
skippedProductsNo

TDQS

A4.5/5.0
Behavior4/5

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

The description adds useful behavioral detail beyond the annotations: products that cannot be stored are reported individually while the rest still land, existing products with the same id or sku are updated rather than duplicated, and idempotencyKey prevents duplicate imports on retry. It does not explicitly warn that updating existing products may overwrite fields, though the destructive annotation already signals mutation risk.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and then efficiently covers input shape, required fields, partial failures, duplicate handling, visibility, and idempotency. Every sentence contributes operational information without 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?

Given the tool's complexity, annotations, and output schema, the description is complete enough for correct invocation. It explains the import contract, required product identity, partial-success semantics, update versus skip behavior, and how imported products are found afterward.

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%, but the description still adds meaningful semantics: title is the only required product field, id or sku is the identity key, and products must conform to foldsquare://schemas/product-import.json. It also clarifies how onExisting and idempotencyKey affect import behavior.

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: storing products in Foldsquare so they can be put in a catalog. It also distinguishes this from a generic import by explaining the standard import shape and the absence of a server-side parser. An agent can tell what this tool is for 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 Guidelines4/5

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

The description gives clear usage context: products must already be in the standard shape, only title is required, and id or sku determines identity. It also explains default update behavior and the onExisting skip option, though it does not explicitly contrast this tool with update_product for single-product edits.

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

list_catalogsList catalogsA
Read-only
Inspect

List the merchant's catalogs, newest first. Use the search argument to find a catalog by title when the user refers to one by name (for example "the Spring Line Sheet"). Returns summaries only — ids, titles and counts, not page contents. Archived catalogs are not returned and cannot be accessed through these tools: a catalog the merchant deleted is archived, and is absent from every result.

NameRequiredDescriptionDefault
pageNoZero-based page number
limitNoMax results (default 20)
searchNoCase-insensitive match against the catalog title

Output Schema

NameRequiredDescription
totalYesCatalogs matching, across all pages
catalogsYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only, non-destructive, and closed-world behavior. The description adds meaningful context beyond that: results are newest-first, summaries omit page contents, and archived/deleted catalogs are absent from every result and inaccessible through these tools.

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?

Four short sentences, front-loaded with the core action and ordering, followed by search guidance, return scope, and archived-catalog caveat. Every sentence adds actionable information.

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?

An output schema exists, so return values need not be fully explained, but the description still clarifies that summaries contain ids, titles, and counts. Annotations cover safety, and the description covers ordering, search usage, and archived exclusions—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 description coverage is 100%, so the baseline is 3. The description adds useful usage semantics for `search`—finding a catalog by title when the user refers to one by name, with an example—going beyond the schema's terse 'case-insensitive match against the catalog title'.

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 ('List the merchant's catalogs') and adds scope details: newest-first ordering, summaries only rather than page contents, and archived exclusion. This clearly distinguishes it from get_catalog and preview tools.

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 tells the agent to use the `search` argument when the user refers to a catalog by name, with a concrete example. It also implicitly steers away from this tool for page contents and archived catalogs, though it does not name an alternative sibling tool explicitly.

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

list_catalog_sharesWho has access to a catalogA
Read-only
Inspect

The owner and everyone the catalog is shared with: email, name, role (editor or viewer) and whether the share is active or still a pending invitation. Owner only.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
ownerNo
sharesNoEveryone the catalog is shared with, active or invited

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnly=true, destructive=false, and closed-world, so the safety profile is covered. The description adds a meaningful behavioral constraint ("Owner only") and clarifies that pending invitations are included, though it does not discuss pagination or failure behavior.

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

Conciseness5/5

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

A single dense sentence plus the "Owner only" restriction, with no filler; the returned fields are front-loaded. Structure is fragment-like but efficient.

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 one-parameter, read-only tool with rich annotations and an output schema, the description supplies the important missing context: the access scope and output composition. An agent has enough information to call it correctly without further prose.

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

Parameters3/5

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

The single required parameter catalogId is fully described in the schema, including how to obtain it from list_catalogs. The description adds no parameter-level detail beyond the schema, so the high coverage baseline of 3 applies.

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

Purpose4/5

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

The description names the resource (catalog shares) and enumerates exactly what is returned: owner plus shared users with email, name, role, and active/pending status. It does not explicitly say "list" or point to a sibling, so it is clear but not fully self-differentiating.

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 adds the authorization condition "Owner only," which is useful context for whether the agent may call it. It does not state when to choose this over siblings such as get_catalog or update_catalog, nor does it describe preconditions beyond ownership, so usage is only implied.

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

list_catalog_snapshotsThe restore points of a catalogA
Read-onlyIdempotent
Inspect

A catalog's restore points, newest first. The in-app assistant stores one before its first change to a catalog in a reply, and a restore stores the state it replaced — so the newest point with reason "assistant" is the catalog as it was before the last assistant change, and a point with reason "restore" is the way to undo a restore. Each has an id for restore_catalog_snapshot, when it was taken, and the tool that was about to run. Points expire after thirty days.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
catalogIdYes
snapshotsYesNewest first

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds useful context beyond that: points are newest-first, expire after thirty days, carry an id, timestamp, and the tool that was about to run, and reason values have distinct semantics.

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 resource and ordering, then explains reason semantics and expiry in three dense sentences. Every sentence carries useful information, though the middle sentence about assistant/restore points is slightly convoluted.

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 annotations covering safety and an output schema covering return shape, the description supplies the behavioral context an agent needs: ordering, expiry, and what each snapshot represents. It could be more explicit about when to call it, but the essential context is present.

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?

There is only one parameter, and the schema already gives it 100% description coverage ('Catalog id, as returned by list_catalogs'). The description adds no parameter-specific meaning, so the baseline of 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 resource (a catalog's restore points) and an ordering (newest first). It also explains the meaning of the reason values, which distinguishes this listing from generic catalog reads and makes the tool's role clear.

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

Usage Guidelines3/5

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

Usage is implied rather than stated explicitly: the description explains that the newest 'assistant' point is the pre-change state and that a 'restore' point undoes a restore, but it never says when to call list_catalog_snapshots versus restore_catalog_snapshot or other catalog tools. The agent can infer the workflow but has to do the work.

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

list_collectionsList collectionsA
Read-only
Inspect

List the merchant's product collections/categories. Resolves a collection the merchant names ("products from the Spring collection") to the id search_products takes. Only some platforms report a parent collection, so parentId is often null and a flat list is not evidence the store has no hierarchy.

NameRequiredDescriptionDefault
limitNoMax collections to return (default 200).
searchNoCase-insensitive substring match on the collection name.
sourceNoSame meaning as in search_products.
parentIdNoOnly the direct children of this collection. Useful for walking a deep hierarchy one level at a time.
topLevelOnlyNoOnly collections with no parent. Ignored when parentId is given.

Output Schema

NameRequiredDescription
totalYes
sourceYes
truncatedYes
accountNoteNo
collectionsYes

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 safety is covered. The description adds genuine non-obvious behavior: parentId is often null because only some platforms report hierarchy, and a flat list is not evidence of no hierarchy. That is real context an agent would otherwise misread as a data quality signal.

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 earning its place: purpose, intended workflow, and a caveat about parentId. Front-loaded with the core purpose and 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?

Output schema exists so return values need not be explained, and annotations cover safety. Remaining gap is minor routing detail versus sibling list tools (list_catalogs, list_product_facets) and how the resolved id should be handed to search_products, but nothing blocks 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 coverage is 100% and each parameter (limit, search, source, parentId, topLevelOnly) is fully documented in the schema, including the parentId/topLevelOnly interaction. The description adds only the conceptual note about parentId nullness, not new syntax or defaults. 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 ('List the merchant's product collections/categories') and goes further to explain its role: resolving a merchant-named collection to the id that search_products takes. Distinguishes it from list_catalogs and get_catalog by naming its downstream consumer explicitly.

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 'resolves a collection the merchant names ... to the id search_products takes' clause is a clear use case that routes an agent from a natural-language request to this tool then to search_products. It does not, however, contrast against list_product_facets, get_catalog, or list_catalogs, so alternative routing is partly inferred.

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

list_imagesThe image libraryB
Read-only
Inspect

The images in the merchant's library — uploads and the brand logo — newest first, with the URL each can be placed with. Search by name.

NameRequiredDescriptionDefault
limitNoDefault 30
searchNoCase-insensitive match on the image name

Output Schema

NameRequiredDescription
imagesYes
logoUrlYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context—newest-first ordering, inclusion of uploads and the brand logo, and returned placement URLs—but does not discuss pagination behavior or limits beyond 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?

A single compact sentence front-loads the resource, its contents, ordering, and returned URLs with no wasted wording. The search capability is appended efficiently.

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?

An output schema exists, annotations cover safety, and the description explains the library contents and ordering. It is nearly complete for a two-parameter read-only list tool, though it omits explicit when-to-use guidance against upload_image.

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 the schema already documents both limit and search fully. The description reinforces that search is by image name, but adds no syntax, defaults, or constraints beyond the structured fields.

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 clearly identifies the resource as the merchant's image library, including uploads and the brand logo, and notes ordering and usable URLs. It does not explicitly differentiate from the sibling upload_image tool, keeping it below a 5.

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

Usage Guidelines2/5

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

It mentions searching by name but gives no guidance on when to use this tool versus alternatives such as upload_image, nor any exclusions or prerequisites. The usage context is only implied through the content description.

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

list_leadsWho filled in the lead formA
Read-only
Inspect

The visitors who gave their name and email to open a catalog whose customer lead form is on — name, email, company, phone, when — newest first. Owner only. When there are none and the form is off, the answer says how to turn it on.

NameRequiredDescriptionDefault
pageNoZero-based page of results
limitNoDefault 50
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
noteNo
pageYes
leadsYes
totalYes
catalogIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Adds meaningful context beyond the readOnly/openWorld/destructive annotations: owner-only access, newest-first ordering, and a special response when the form is off. It does not cover rate limits or permission details, but the annotation bar is lower and the added behavior is useful.

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?

Compact at three sentences with no redundant information. The first sentence is dense and phrased awkwardly as a noun phrase, but the content is front-loaded enough for an agent to parse quickly.

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?

Output schema, annotations, and full schema coverage mean the description need not explain return values or parameter syntax. It still includes owner restriction and form-off behavior, making it complete for this low-complexity read tool.

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

Parameters3/5

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

Schema coverage is 100%, so page, limit, and catalogId are already documented in the input schema. The description adds no parameter-level meaning beyond the schema, which is baseline when the schema does the work.

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?

Identifies the resource clearly: visitors who submitted a catalog's lead form, along with the returned fields. It is phrased as a noun phrase rather than a verb and does not explicitly contrast with any sibling tool, but an agent can still tell it lists leads.

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 description notes the owner-only restriction and the empty-form state, but gives no explicit when-to-use guidance or alternative tool routing. Usage is implied from the resource description rather than stated.

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

list_product_facetsList product filter valuesA
Read-only
Inspect

The vendors, product types and tags the store actually uses. search_products matches vendor, productType and tags exactly, so these are the values its filters take — not the merchant's paraphrase of them. A facet with complete: false means this store publishes no such list, and its empty values do not mean the merchant has none.

NameRequiredDescriptionDefault
limitNoMax values per facet, most common first (default 50).
fieldsNoWhich facets to return. Defaults to vendor, productType and tags.
sourceNoSame meaning as in search_products.
collectionIdNoRestrict counts to one collection. Honoured for Foldsquare-held products only; `scoped` reports whether it applied.

Output Schema

NameRequiredDescription
facetsYesPer facet (vendor, productType, tags, …), the exact values the filters take
sourceYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavioral context: values are exact-match keys, not merchant paraphrases; `complete: false` signals no published list; and empty values are not evidence of absence. That is substantive beyond the annotations, though auth, rate limits and ordering behavior are left to 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.

Conciseness4/5

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

Three tight sentences, front-loaded with the core content ('the values the store actually uses') before the search_products relationship and the caveat. The opening noun fragment is slightly clipped but costs nothing.

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 an output schema present the description needn't explain return shape, and with full schema coverage it needn't repeat parameter docs; what remains — why the values matter and how to read `complete: false` — is covered. Nothing critical 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 coverage is 100%, so all four parameters are already documented, and the description adds no per-parameter detail for `limit`, `fields`, `source` or `collectionId`. It does explain the semantics of the `scoped`/`complete` flags at a conceptual level, but the baseline of 3 is the correct ceiling here.

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

Purpose4/5

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

The description states exactly what is returned — the vendor, productType and tags values the store actually uses — and ties that directly to search_products' exact-match filters, which distinguishes it from the sibling that consumes these values. It never states an explicit verb (the 'List' framing only appears in the title), so it falls just short of a textbook verb+resource statement.

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 implicitly but clearly positions the tool as the prerequisite to search_products: 'these are the values its filters take' tells the agent to come here before filtering. It also gives a when-not-to-trust rule via the `complete: false` caveat. No explicit 'do not use this for X' exclusion is offered.

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

list_templatesList catalog templatesA
Read-only
Inspect

List the templates a catalog can be built from. A template supplies the DESIGN — covers, fonts, colours, the product-cell layout — so a catalog created without one is a structurally correct but blank document with nothing to look at. The template is the merchant's choice: it cannot be swapped afterwards without rebuilding, and create_catalog without one refuses and returns these same choices. Use it before create_catalog. On a host that supports MCP Apps this opens a picker beside the chat showing each template as a picture with a "Use this template" button, and the merchant's pick arrives as their next message. Each entry has an id (the template argument of create_catalog), a title and how many products a page holds. thumbnailUrl, when present, is the picture the picker panel shows of the template's products page.

NameRequiredDescriptionDefault
searchNoCase-insensitive match against the template name

Output Schema

NameRequiredDescription
templatesYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark it read-only/non-destructive, and the description adds context annotations cannot: the MCP Apps picker panel, that the merchant's pick arrives as their next message, and that thumbnailUrl drives that panel's imagery. That is real interaction behavior beyond the safety hints.

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 a template is and when to call, then the picker behavior. Six sentences is long for a list tool, but nearly all of it carries load; the MCP Apps picker sentence is defensible because it changes how the agent should read the follow-up message.

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?

An output schema exists, so return values needn't be explained, yet the description still tells the agent what each entry contains and how the id feeds create_catalog. Prerequisites, failure mode of the alternative, and UI behavior are all covered — 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.

Parameters3/5

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

Schema coverage is 100% and the single `search` parameter is fully documented in the schema; the description never mentions it. It does add meaning about the returned entries (id, title, products-per-page, thumbnailUrl) and links the id to create_catalog's `template` argument, but input-side semantics are left entirely to 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 (list the templates a catalog can be built from) and immediately defines what a template supplies — covers, fonts, colours, product-cell layout. This separates it cleanly from siblings like list_images or list_collections, which are also 'list' tools over catalog assets.

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 sequencing: 'Use it before create_catalog', plus the consequence of skipping it ('create_catalog without one refuses and returns these same choices') and the irreversibility ('cannot be swapped afterwards without rebuilding'). An agent knows exactly when and why to call this versus going straight to create_catalog.

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

open_publish_settingsOpen the publish settings panelA
Read-only
Inspect

Open the Publish dialog beside the chat, as a form the merchant fills in themselves: published or draft, the custom URL, what a product click does, auto-sync, the lead form, password protection, search visibility and the viewer's look and buttons — with what their plan does not allow shown locked. Call it when they want to review or change several of these at once, or to set a password (typed into the panel, it never passes through the chat). What they save is reported to you afterwards. For a single change they have already named ("turn off downloads"), call set_publish_options instead. Needs a host that shows MCP Apps; elsewhere the text lists the settings.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
titleYes
lockedYes
optionsYes
catalogIdYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, non-destructive, closed-world), and the description adds non-obvious behavior: plan-disallowed options render locked, the password is typed into the panel and never transits the chat, and the saved result is reported back afterwards. These are things an agent could not infer from annotations or 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?

The verb and resource are front-loaded and every later clause carries actionable information (exclusion case, host caveat, password handling). The settings enumeration is a long run-on list, but it is doing real work rather than padding.

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 one-parameter UI-opening tool with an output schema, the description covers the interaction model, what happens on save, the fallback when MCP Apps is unavailable, and the alternative tool. 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?

The single catalogId parameter is fully documented in the schema (100% coverage, including that ids come from list_catalogs), and the description adds nothing about it. With the schema carrying the full burden, 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?

Opens with a concrete verb and resource ("Open the Publish dialog beside the chat") and enumerates exactly what the panel contains, so an agent knows this is an interactive settings UI rather than a data fetch. It also names the sibling it is not (set_publish_options) for the single-change case.

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 selection criteria: use it "when they want to review or change several of these at once, or to set a password," and use set_publish_options instead for "a single change they have already named." The host prerequisite (needs MCP Apps, otherwise text fallback) is also stated, which prevents a failed invocation.

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

pick_productsLet the merchant pick productsA
Read-only
Inspect

Open a product picker beside the chat: the merchant searches, filters by collection, vendor, type, tag and stock, and ticks the products they want from a grid of pictures. Their selection comes back to you — the product ids in your context and a short message from them saying how many they picked — ready for create_catalog (products: { from: "ids", ids }) or edit_catalog addProducts. Call it when a selection is theirs to make by looking ("let me choose which ones", a hand-picked page); products described well enough to search for are search_products. purpose is shown as the picker's heading and repeated back with the selection. Needs a host that shows MCP Apps.

NameRequiredDescriptionDefault
tagsNoKeep only products carrying any of these tags
searchNoFree-text match on title and SKU, as in search_products
sourceNoSame meaning as in search_products
vendorNoKeep only these vendors, spelled as list_product_facets reports them
purposeNoWhat the selection is for, e.g. "the Spring page" — shown to the merchant
productTypeNoKeep only these product types, spelled as list_product_facets reports them
availabilityNoPurchasability, as in search_products; default "any"
collectionIdNoStart inside one collection — an id from list_collections

Output Schema

NameRequiredDescription
hasMoreYes
partialYes
productsYes
collectionsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint false, so the bar is lower, and the description still adds real context: an interactive UI is opened, `purpose` becomes the picker heading and is echoed back, the selection arrives as ids in context plus a merchant message, and a host must support MCP Apps. It does not mention the sibling pick_products_search or what happens on a non-MCP-Apps host, which keeps 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-loaded with the core action, then return shape, then the routing rule — a sensible order with no filler. It is denser than it needs to be in places (the filter enumeration partly duplicates the schema) but every sentence carries 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 interactive tool with 8 optional params and an output schema, it covers the essentials: what the merchant does, what comes back, the environment prerequisite, and where the result plugs in. The main gap is behavior on hosts without MCP Apps support and its relationship to pick_products_search.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds meaning beyond the schema by explaining that `purpose` is rendered as the picker's heading and repeated back with the selection, and by framing the filters as in-picker facets. Remaining parameters get no added semantics because the schema already covers them well.

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 — opens a product picker beside the chat — and describes the interaction (search, filter, tick from a picture grid) and the return (product ids plus a merchant message). It explicitly contrasts with search_products, so an agent can route 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 an explicit when-to-use condition ("Call it when a selection is theirs to make by looking", a hand-picked page) and an explicit when-not with the alternative named ("products described well enough to search for are search_products"). It also names the downstream consumers, create_catalog and edit_catalog addProducts.

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

preview_catalogPreview a catalogA
Read-only
Inspect

The catalog as a whole: returns the page list and livePreviewUrl, a read-only page that shows the catalog exactly as it renders and reloads by itself whenever the catalog changes, keeping the page the viewer is on. For "show me", "what does it look like", or following edits as they land. Nothing opens beside the chat; preview_page shows ONE page, or a few, as pictures beside the chat. Reads the catalog and changes nothing.

NameRequiredDescriptionDefault
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
pagesYes
titleYes
totalYesPages in the catalog
catalogIdYes
editorUrlYes
viewerUrlNo
livePreviewUrlYesA read-only page that reloads itself whenever the catalog changes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations, it explains that `livePreviewUrl` is a read-only page showing the catalog exactly as it renders, reloading automatically when the catalog changes while keeping the viewer on the same page. It also clarifies that nothing opens beside the chat and that the tool reads the catalog without changing anything.

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

Conciseness5/5

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

The description is front-loaded with the core result and the `livePreviewUrl` return value, then adds usage cues and sibling differentiation. Despite being information-dense, every clause contributes to selecting or understanding the tool.

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

Completeness5/5

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

The tool has an output schema and rich annotations, and the description still adds the important live-reload behavior and in-chat presentation boundary. An agent has enough information to choose this tool and understand what it returns.

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 `catalogId` parameter is already documented as coming from `list_catalogs`. The description does not add further parameter meaning 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?

The description states a specific resource and output: the catalog as a whole, returning the page list and `livePreviewUrl`. It also clearly differentiates itself from `preview_page`, which shows one page or a few as pictures beside the chat.

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

Usage Guidelines5/5

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

It gives explicit use cases: "show me", "what does it look like", or following edits as they land. It also gives a clear exclusion by directing single-page image previews to `preview_page` instead.

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

preview_pageShow pages of a catalogA
Read-only
Inspect

One page, or a few, as pictures. On a host that supports MCP Apps this opens a panel beside the chat with those pages rendered exactly as the catalog prints — covers, product tiles, fonts and colours — with Enlarge, Refresh and Open in editor. The merchant can also act in it: move, duplicate or delete a page (reported afterwards; page indexes after it shift, and get_catalog has the new ones), and "Point & edit", which sends their wish as a message naming the page index and the productId or blockId they clicked — the ids edit_catalog takes. For a specific page ("show me page 2", "let me see the cover"): pages takes zero-based indexes as get_catalog lists them, so the merchant's "page 1" is index 0. The catalog as a whole is preview_catalog. The text result lists the pages and the editor link, for hosts that show no panel. Reads the catalog and changes nothing.

NameRequiredDescriptionDefault
pagesYesZero-based page indexes to show, as get_catalog lists them — the merchant's "page 1" is index 0.
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
pagesYes
titleYes
totalYes
rendererYes
catalogIdYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint=false, and the description clarifies the apparent tension by stating outright "Reads the catalog and changes nothing" while disclosing that panel-side merchant actions happen outside the call and shift page indexes afterwards (recoverable via get_catalog). It also documents the host-dependent rendering, the panel controls, and the text-result fallback for hosts without a panel — well beyond what annotations provide.

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 opener ("One page, or a few, as pictures") is the vaguest sentence and comes before the load-bearing routing and indexing rules, so front-loading is weak. The zero-based convention is effectively stated twice, and the panel-mechanics paragraph is dense prose for a two-parameter read tool.

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 an output schema present, return values needn't be described, yet the definition still notes the text result lists pages plus the editor link. Combined with the panel behavior, index-shift consequence, and sibling routing, an agent has everything needed to call it and anticipate the result.

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 the description's zero-based explanation ("the merchant's 'page 1' is index 0") largely restates the schema's own description of `pages`. It adds the conversational mapping from merchant phrasing to index, but says nothing about catalogId beyond what the schema states, and omits the 1–50 item bounds.

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 definition states a concrete verb and resource — render selected catalog pages as pictures, optionally in an MCP Apps side panel — and explicitly routes whole-catalog viewing to preview_catalog. It does not distinguish itself from the sibling preview_page_image, which plausibly overlaps, so the scope boundary is not fully closed.

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

Usage Guidelines5/5

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

It gives the exact selection condition ("For a specific page ('show me page 2', 'let me see the cover')") and names the alternative for the opposite case ("The catalog as a whole is preview_catalog"). It further explains the merchant-facing index convention and the downstream edit path (Point & edit → ids edit_catalog takes), leaving no routing decision to inference.

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

preview_page_imageOne page of a catalog, as a pictureA
Read-only
Inspect

Used by the preview panel, which calls it for each page as it scrolls into view: returns one page as a rendered image URL. preview_page is the tool that shows pages to the merchant.

NameRequiredDescriptionDefault
indexYesZero-based page index, from preview_page.
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
indexYes
stateYes
targetsNo
imageUrlNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, non-destructive, closed-world), and the description adds the return shape (rendered image URL) plus the high-frequency scroll invocation pattern, which matters for batching or rate considerations. It stops short of any explicit cost or throttle guidance given that per-scroll calling pattern.

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 short sentences, front-loaded with the caller context before the return value. The opening clause about the preview panel is slightly wordier than needed but earns its place by explaining the invocation cadence.

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?

An output schema exists and both parameters are fully documented in the schema, so the description needn't explain returns or inputs. The only residual gap is the fuzzy overlap with preview_page, but nothing required 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 description coverage is 100% and both parameters already document their provenance (index from preview_page, catalogId from list_catalogs). The description adds nothing about either parameter, so the baseline 3 applies.

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

Purpose4/5

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

States a concrete verb+resource: returns one catalog page as a rendered image URL. It also names the sibling preview_page and positions this as the panel-driven image variant, though the distinction ('preview_page is the tool that shows pages to the merchant') is a bit circular for an agent that only knows it wants a page.

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 discloses the intended caller ('the preview panel, which calls it for each page as it scrolls into view') and points at preview_page as the merchant-facing alternative. The routing condition is implied rather than stated as an explicit 'use X when / use this when', so an agent has context without a crisp rule.

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

publish_catalogPublish a catalogA
Idempotent
Inspect

Make a catalog live and start rendering its PDF. The viewer link works immediately — the flipbook does not wait for the PDF. A large catalog takes a few minutes to render; one not finished within about twenty seconds comes back with render.state "rendering" and a jobId, which is not a failure: the catalog is published, the link works, and get_catalog_pdf with that jobId returns the PDF once it is done. render.state is "ready" (with downloadUrl), "rendering", "failed" (with reason) or "not_configured". A draft goes live only on a call with confirm: true. Without it, nothing changes and the answer lists what would go live under requiresConfirmation — the catalog and its public link — for the merchant to approve, with confirmWith holding the arguments that carry it out. A catalog that is already live re-renders its PDF with no confirmation.

NameRequiredDescriptionDefault
renderNoSet false to publish without rendering a PDF (default true)
confirmNotrue once the merchant has agreed to make a draft public
catalogIdYesCatalog id, as returned by list_catalogs
pdfFormatNoThe dialog's PDF format: compressed (default, smaller, for sharing and email) or print (press quality)

Output Schema

NameRequiredDescription
renderNoWhere the PDF render stands
statusNo
appliedNofalse: a draft waiting for the merchant to confirm going live
catalogNo
publicUrlNoWhere the catalog would go live
publishedNo
viewerUrlNoThe public link, live at once
confirmWithNoThe arguments that carry the change out once the merchant agrees
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: exact render.state values and their meanings, the ~20 second async threshold, that a 'rendering' result is not a failure, and the full confirmation flow including requiresConfirmation/confirmWith payload structure. With annotations covering the safety profile, this is unusually rich disclosure.

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 in sentence one, then layers async behavior, state values, and the confirmation gate in a logical order. It is dense but every sentence carries information; minor length is justified by the async/confirmation complexity.

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

Completeness5/5

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

For a tool with an output schema, async job semantics, and a confirmation gate, the description covers everything an agent needs: what happens immediately vs. asynchronously, how to retrieve the PDF later, and how to handle the untrusted draft case. No material gaps.

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 goes further by explaining the actual behavioral meaning of confirm (draft goes live only with it; otherwise a read-only preview of what would go live is returned) and the render parameter's timing implications, which the schema's one-liners don't convey.

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+resource ('Make a catalog live and start rendering its PDF'), which distinguishes it from preview_catalog, get_catalog_pdf, and set_publish_options. An agent can identify the operation 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 Guidelines4/5

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

Gives clear conditions: drafts need confirm: true, already-live catalogs re-render without confirmation, and render: false skips the PDF. It routes to get_catalog_pdf for async retrieval. It does not explicitly name sibling tools like get_publish_options or preview_catalog as alternatives, so a 4 rather than a 5.

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

restore_catalog_snapshotPut a restore point backA
Idempotent
Inspect

Put a catalog back to how it was at a restore point from list_catalog_snapshots — its pages, products, design and settings. Everything changed since that point is undone, including the merchant's own edits in the editor; the catalog's publish state and public link are left as they are. The state being replaced is stored first, so a restore can itself be undone. Destructive, so it runs only on a call with confirm: true; without it nothing changes and the answer lists what would be undone under requiresConfirmation, for the merchant to approve. The snapshotId comes from list_catalog_snapshots; the newest point with reason "assistant" is the state before the last assistant change.

NameRequiredDescriptionDefault
confirmNotrue once the merchant has agreed to the restore listed under requiresConfirmation
catalogIdYesCatalog id, as returned by list_catalogs
snapshotIdYesRestore point id, as returned by list_catalog_snapshots

Output Schema

NameRequiredDescription
appliedYes
catalogNo
restoredNo
catalogIdNo
snapshotIdNo
confirmWithNoThe arguments that carry the change out once the merchant agrees
safetySnapshotIdNoThe state just replaced, so the restore can be undone
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A3.9/5.0
Behavior1/5

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

The description transparently explains destructive effects, undo behavior, confirm handling, and what is preserved, but it explicitly says the operation is destructive while annotations declare destructiveHint=false. That is a direct contradiction in a safety-relevant field.

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

Conciseness5/5

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

The description is dense but front-loaded: effects, exclusions, undoability, confirmation behavior, and snapshot source each appear in a purposeful sentence 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?

Given that an output schema exists and the schema fully documents parameters, the description covers the remaining agent-critical context: restoration scope, preserved state, undo behavior, confirmation handling, and snapshot selection.

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 useful meaning: confirm enables the dry-run/approval workflow when absent, and snapshotId is sourced from list_catalog_snapshots, with a specific rule for finding the pre-assistant state.

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: putting a catalog back to a restore point from list_catalog_snapshots. It also names exactly which catalog aspects are restored (pages, products, design, settings), making it distinguishable from edit_catalog and update_catalog.

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?

Clearly directs the agent to obtain snapshotId from list_catalog_snapshots and explains that the newest reason="assistant" point is the state before the last assistant change. It also specifies the confirm: true approval flow, though it does not explicitly compare when to use restore versus selective edit_catalog actions.

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

search_productsSearch productsA
Read-only
Inspect

Search the merchant's products. For a connected store (Shopify, WooCommerce, BigCommerce, Ecwid, Wix) this queries the store live; otherwise it reads products stored in Foldsquare. The ids it returns are exactly what create_catalog takes as products: { from: "ids", ids: [...] }. Not every store can apply every filter, and a filtered search may stop before it has looked at everything — then partial is true and note says what was covered: the result is not the complete set.

NameRequiredDescriptionDefault
sortNoDefault "relevance", which on most stores means the store's own order; "title" gives a predictable alphabetical order. `coverage.sortApplied` reports what was actually used.
tagsNoKeep only products carrying these tags. Not every store exposes tags — same reporting as productType.
limitNoHow many products to return (default 20). A page size, not a total — use `cursor` for the rest.
orderNoDirection for `sort`.
cursorNoContinues a previous search: `nextCursor`, with EVERY OTHER ARGUMENT UNCHANGED. A cursor sent with changed filters is refused.
searchNoFree-text match on title and SKU. On a connected store this is the store's own search, so what counts as a match varies by platform; `coverage` says who did the matching.
sourceNoWhere to read. "auto" (default) queries the connected store if there is one. Use "foldsquare" to find products added with import_products: those are not in the store, so "auto" will never return them.
statusNoPublication status, default active, which leaves drafts out; "any" includes them.active
vendorNoKeep only these vendors/brands. Exact match, case-insensitive; any one counts. Call list_product_facets first to get the real spellings instead of guessing at them.
tagsModeNo"any" (default) keeps a product carrying at least one of the tags; "all" requires every one.
productTypeNoKeep only these product types. Several platforms have no such field; there the filter is reported under `coverage.unsupported` rather than quietly matching nothing.
availabilityNoPurchasability, NOT inventory count: a made-to-order product with zero on hand is in stock. This is what a merchant means by "in stock". Default "any".
collectionIdNoRestrict to one collection/category. Take the id from list_collections — a collection NAME will not work on a connected store.

Output Schema

NameRequiredDescription
noteNo
totalYesnull when the store does not say
sourceYesWhere the products were read: the store platform or foldsquare
hasMoreYes
partialYestrue: the search stopped before covering everything; `note` says what was covered
coverageYesWhich filters the store applied, and how far the search looked
productsYes
returnedYes
nextCursorYesPass as `cursor`, with every other argument unchanged, for the next page
totalIsExactYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive, closed-world profile, and the description adds real value beyond them: live vs stored reads, that some stores cannot apply every filter, and that filtered searches can stop early with `partial` and a `note` explaining coverage. It does not discuss rate limits or cost, but the partial-result warning is the important behavioral disclosure.

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 with no filler, front-loading the resource and backend distinction before the output-contract and partial-result caveat. Dense but each sentence carries information an agent needs.

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 13-parameter search tool with an output schema and full schema descriptions, the description supplies the pieces the schema cannot: which backend is read, the id contract with create_catalog, and the meaning of `partial`/`note`. Complete enough to call correctly without opening 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 description coverage is 100%, so the parameters are already fully documented. The description adds only a general caveat that filters may be unsupported per store; it provides no per-parameter guidance beyond what the schema states, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Search the merchant's products") and immediately clarifies the two backends it can hit: a live connected store or Foldsquare-stored products. It does not explicitly distinguish itself from near-name siblings like pick_products_search or get_product, 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 usage rule: connected store → live query, otherwise Foldsquare, and notes that import_products additions are only visible via the Foldsquare source. It omits when an agent should prefer a different search/pick tool, so alternatives are only partially addressed.

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

set_publish_optionsChange how a catalog is publishedA
DestructiveIdempotent
Inspect

Switch the Publish dialog's options on and off: publish or unpublish (published), the custom URL (slug), what a product click does (clickBehavior), auto-sync, the customer lead form, password protection with its password, search-engine visibility, and the viewer — view mode, theme, background colour, which toolbar buttons show, reading direction, single page, shadows, lighting, flip sound and speed. Options left out are left as they are. What the plan or store allows is applied and listed under applied; the rest comes back under refused, each with its reason — nothing is downgraded silently. The result is the catalog as it now stands. The password is one the merchant chooses; open_publish_settings takes it in a form, without it passing through the chat. published: true publishes without rendering a PDF; publish_catalog does both. When published: true would take a draft live, nothing in the call is applied without confirm: true; the answer lists what would go live under requiresConfirmation — the catalog and its public link — for the merchant to approve, with confirmWith holding the arguments that carry it out. The retail cart needs a Shopify store and its Storefront API token, which is entered in Foldsquare's settings and is not accepted by these tools.

NameRequiredDescriptionDefault
confirmNotrue once the merchant has agreed to make a draft public
optionsYesThe options to change; omit the rest
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
titleNo
lockedNoOptions the plan or store does not allow, each with its reason
statusNo
appliedNoThe options changed; false when a draft is waiting for the merchant to confirm going live
catalogNo
optionsNoEvery Publish dialog option, as set_publish_options takes them
refusedNoOptions not changed, each with why
catalogIdNo
editorUrlNo
embedCodeNo
publicUrlNo
publishedNo
shareLinkNo
viewerUrlNo
confirmWithNoThe arguments that carry the change out once the merchant agrees
livePreviewUrlNo
requiresConfirmationNoPresent when nothing was changed: the consequences to show the merchant before calling again with confirm: true

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations, it discloses partial-update semantics, plan/store permission handling via `applied` and `refused` with reasons, no silent downgrades, password non-return, and the draft-to-live confirmation flow with `requiresConfirmation` and `confirmWith`. These are material behavioral details an agent needs before invoking a destructive, open-world mutation.

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

Conciseness4/5

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

The description is long but mostly earns its length given the many nested options and confirmation behavior. It is front-loaded with purpose and option scope, though the dense single paragraph could be more clearly structured.

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

Completeness5/5

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

For a complex destructive mutation with nested objects and an output schema, the description covers the key gaps: partial updates, permission refusals, confirmation requirements, password handling, and the distinction from sibling publish tools. Nothing essential for correct invocation appears 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 individual parameters in detail. The description still adds cross-parameter meaning: omitted options remain unchanged, `confirm: true` gates draft publication, and `published: true` has different PDF behavior than publish_catalog.

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

Purpose5/5

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

The description opens with a specific verb and resource: switching the Publish dialog's options on and off, then enumerates the option areas. It also distinguishes this from publish_catalog by noting that `published: true` here does not render a PDF, while publish_catalog does both.

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

Usage Guidelines5/5

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

It explicitly routes agents to alternatives: publish_catalog for publishing plus PDF rendering, and open_publish_settings for entering the password via a form rather than through chat. It also states the confirmation requirement when publishing a draft, which is a key conditional before calling.

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

show_analyticsShow the analytics dashboardA
Read-only
Inspect

Open the analytics as a dashboard beside the chat: views, visitors and product clicks over time as a chart, top catalogs, referrers, countries and devices — or, with catalogId, that catalog's top products, most viewed pages, live visitors and the leads its form collected. The merchant can switch the period and open a catalog from the overview in the panel. For when they want to see how things are going; a specific question answered from the numbers is get_analytics. Needs a plan with analytics, as get_analytics does.

NameRequiredDescriptionDefault
toNoISO date, with period "custom"; default now
fromNoISO date, with period "custom"
periodNo7d, 30d, 90d, 1y, all, or custom with from/to30d
catalogIdNoOne catalog, as returned by list_catalogs; omit for the overview

Output Schema

NameRequiredDescription
periodYes
summaryYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark it read-only, non-destructive and closed-world; the description adds useful context: it opens a dashboard beside the chat, the merchant can switch period and open a catalog in the panel, and a plan with analytics is required. It does not describe error behavior or data freshness, but with annotations and an output schema it provides substantial 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?

Front-loaded with the verb and resource, then the content, prerequisite and alternative. It is dense and somewhat long, but each clause (catalog mode, panel interaction, plan requirement, alternative tool) carries useful selection information.

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?

Complete enough for a read-only dashboard tool: content, scope, prerequisite and alternative are present, and the output schema covers return values. No essential calling detail 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 adds meaningful semantics for catalogId: it changes the output to that catalog's top products, most viewed pages, live visitors and collected leads, not merely a filter. It also reinforces the period parameter by noting that the merchant can switch periods in the panel.

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 a specific resource ('analytics as a dashboard') and enumerates the views, visitors, clicks, top catalogs, referrers, countries and devices, so the agent knows exactly what appears. It explicitly separates overview mode from catalog-scoped mode and names get_analytics as the adjacent tool.

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?

States the situation ('when they want to see how things are going') and the alternative for a specific numeric question ('get_analytics'). It also adds the prerequisite ('Needs a plan with analytics'), leaving little ambiguity about when to use it.

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

sync_catalog_productsRefresh a catalog's products from the storeA
DestructiveIdempotent
Inspect

The Data tab's "refresh from store": fetch the catalog's products from the store again and update the tiles. what is "all" (every field), "prices" (prices only) or "images" (pictures only); productIds limits it to some products. A field the merchant changed by hand in the catalog is kept and reported under keptEdits; keepEdits: false overwrites it as the app does. One fetch per product, so up to 200 products per call — truncated lists what is left for another call.

NameRequiredDescriptionDefault
whatNoDefault all
catalogIdYesCatalog id, as returned by list_catalogs
keepEditsNoDefault true
productIdsNoOnly these products, by the ids get_catalog reports; default every product in the catalog

Output Schema

NameRequiredDescription
whatYes
skippedYes
keptEditsYesFields the merchant changed by hand, left as they are
refreshedYesProducts updated, with the fields that changed
truncatedNoProducts beyond the cap, for another call
unchangedYes
missingInStoreYes

TDQS

A4.9/5.0
Behavior5/5

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

The description provides crucial operational behavior beyond the annotations, noting the batch limit ('One fetch per product, so up to 200 products per call') and explaining the mechanism of truncation and subsequent calls. It also clarifies that field edits are kept or overwritten based on the `keepEdits` parameter.

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 dense and highly efficient, but its length is necessary to cover all its complex operational aspects (sync types, pagination, state preservation). Each part of the text is essential.

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

Completeness5/5

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

Given the complexity of the operation—handling different sync scopes, manual user edits, and batch processing—the description is exceptionally complete. It anticipates agent questions regarding data preservation and technical limitations.

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

Parameters5/5

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

While the schema is 100% covered, the description adds significant semantic value for every parameter. For 'what', it explicitly defines 'all', 'prices', and 'images'; for 'productIds', it explains the source of the IDs; and for 'keepEdits', it describes the functional consequences of the boolean value.

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

Purpose5/5

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

The description clearly identifies the resource (catalog's products) and the action (fetch and update tiles). It differentiates this operation from basic updates (like update_product) by focusing on refreshing data from the 'store'.

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

Usage Guidelines5/5

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

It provides comprehensive usage guidelines by defining how to scope the sync ('what' options: all, prices, images) and which specific items to target (productIds). It also details the critical logic for preserving user input via the keepEdits flag.

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

update_catalogChange the catalog itselfA
DestructiveIdempotent
Inspect

The catalog's own settings, as the editor's settings drawer and Branding panel have them: its title, its page size (a preset such as A4 or Letter Landscape, or custom dimensions), how prices are written (priceFormat), and its branding — the brand colour palette and the typography of body text and headings h1 to h4 (Google Fonts family, size in print px, weight, line height, colour, case). Only what is given changes; typography merges per style, the palette is replaced as a whole. get_catalog reports the current values under design. Page content is edit_catalog; publishing is set_publish_options.

NameRequiredDescriptionDefault
changesYesWhat to change; omit the rest
catalogIdYesCatalog id, as returned by list_catalogs

Output Schema

NameRequiredDescription
titleYes
appliedYesThe settings changed
logoUrlYes
brandingYesBrand colours, typography and fonts
pageSizeYes
priceFormatYes

TDQS

A4.4/5.0
Behavior4/5

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

Given annotations already flag destructiveHint=true and idempotentHint=true, the description adds the crucial nuance the annotations cannot: partial-update semantics ('Only what is given changes'), per-style merge for typography, and whole-palette replacement for brandColors. That distinguishes merge from overwrite, which is the real risk here. It stops short of stating any permission/auth requirement or confirming that palette replacement is irreversible.

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 resource being changed, then merge semantics, then sibling routing — a sensible order with no filler sentences. It is somewhat dense in one block, and the parenthetical listing of typography attributes (font family, px, weight, line height, colour, case) duplicates schema detail that the agent will read anyway.

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 two-parameter nested mutation tool with 100% schema coverage, full annotations, and an output schema, nothing needed to call it correctly is missing: scope, merge-vs-replace behavior, read-back source, and sibling boundaries are all covered.

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 the schema already carries the heavy lifting — including the per-style merge note and the 'replaces the current one' note for brandColors, plus priceFormat examples. The description's enumeration of typography properties and presets largely restates that, so it adds only marginal parameter meaning beyond the 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?

The description states a specific resource ('the catalog's own settings') and enumerates the exact surfaces it covers — title, page size presets/custom dimensions, priceFormat, brand palette, and typography for body plus h1–h4. It explicitly separates itself from edit_catalog (page content) and set_publish_options (publishing), so an agent can pick the right tool from siblings 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?

It names two sibling alternatives verbatim and the boundary condition that selects each ('Page content is edit_catalog; publishing is set_publish_options'). It also routes the agent to get_catalog to read current values under `design`, giving the read-modify-write pattern explicitly.

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

update_productEdit a product held in FoldsquareA
DestructiveIdempotent
Inspect

Change a product the merchant keeps in Foldsquare (imported, or added by hand): title, sku, barcode, prices, cost, stock, description, images, category, vendor, tags, status, and its options and variants (each list replaced whole; variants: [] removes them). Give only the fields to change. A product that comes from the connected store is not editable here — it is edited in the store, or per catalog with edit_catalog's editProduct — and the answer says so. productId is the id search_products reports (or the sku).

NameRequiredDescriptionDefault
fieldsYesThe fields to change
productIdYesThe id search_products reports with source "foldsquare", or the sku

Output Schema

NameRequiredDescription
changedYesThe fields changed
productYes
updatedYes

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: it explains why destructiveHint is true (list fields are replaced whole; `variants: []` removes variants), states that the tool is a partial update so unspecified fields survive, and discloses precondition failure behavior — a store-backed product is rejected and the answer says so. This is exactly the context an agent needs before a destructive write.

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 and object, with the critical preconditions in the middle and the id hint last — a logical order. The parenthetical asides and dash clauses pack a lot per sentence and reward a careful second read, so it is dense rather than wasteful.

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

Completeness5/5

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

Given nested objects, destructive semantics, and an existing output schema, the description covers everything an agent needs: which products qualify, what gets overwritten, how to do a partial update, how variants are cleared, and how to supply the id. Return values are correctly left to the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: `productId` accepts either the id that search_products reports or the sku, and `fields` should contain only the delta rather than a full object. It doesn't add cardinality or validation detail beyond the schema, which already documents options/variants replacement.

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 ("Change a product the merchant keeps in Foldsquare") and enumerates exactly which attributes are editable, so the scope is unambiguous. It also names what it is not: store-sourced products edited in the store or via edit_catalog's editProduct, distinguishing it from the two nearest 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?

Explicit when-to-use (merchant-kept products, imported or hand-added), when-not (products originating from the connected store), and the alternatives (the store itself, or edit_catalog's editProduct per catalog). It also gives the partial-update rule, "Give only the fields to change," which is the key calling convention.

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

upload_imageUpload an imageA
Idempotent
Inspect

Put an image into the merchant's image library, re-hosted on the catalog's own storage with resized variants, and get back the URL to use in edit_catalog (addBlock with an image, editBlock with url, editProduct with main_image). Give either url — a publicly reachable image, fetched and copied — or base64 with its contentType. JPEG, PNG, WebP or GIF, up to 20 MB. The same picture uploaded twice lands once.

NameRequiredDescriptionDefault
urlNoA public image URL to copy
nameYesA name for the library, e.g. "Spring cover"
base64NoThe image bytes, base64 (no data: prefix)
contentTypeNoWith base64

Output Schema

NameRequiredDescription
urlYesThe URL edit_catalog places the image with
nameYes
widthYes
fileIdYes
heightYes
variantsNoResized copies, by width

TDQS

A4.5/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, idempotentHint=true, destructiveHint=false), and the description adds genuinely new behavior: server-side re-hosting with resized variants, supported formats, a 20 MB ceiling, and deduplication ('lands once'). It does not mention auth or rate limits, but that is a minor remaining gap against the annotation coverage.

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 action and its outcome, followed by input rules and constraints. Every clause carries information; the parenthetical list of edit_catalog call sites is directly actionable 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?

With an output schema covering the return value and full annotation coverage, the description supplies exactly what structured fields cannot: re-hosting behavior, dedupe semantics, format/size limits, input modality choice, and downstream consumption points. Nothing an agent needs to invoke this 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 earns more: it clarifies that 'url' is fetched and copied and must be publicly reachable, that 'base64' pairs with 'contentType', and it states the format and size constraints. It also implies the url/base64 mutual exclusivity that the schema itself does not enforce via oneOf.

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

Purpose5/5

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

The description opens with a precise verb and resource ('Put an image into the merchant's image library') and immediately adds the material outcome: re-hosting, resized variants, and a returned URL. It also names the downstream tools where the URL is consumed, so it is unmistakable against siblings like list_images.

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 clearly explains the two input paths ('Give either url ... or base64 with its contentType') and where the resulting URL is used (edit_catalog/addBlock, editBlock, editProduct). What's missing is an explicit exclusion or a pointer to list_images when the agent merely wants to see existing images.

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

validate_catalogValidate a catalog documentA
Read-only
Inspect

Dry-run a catalog DSL document: compile and lint it, write nothing. Returns what it would produce and every problem found, each addressed by JSON path. The grammar is foldsquare://schemas/catalog-dsl.json; the field ids are foldsquare://schemas/product-fields.json. It is free, and the issues it returns are specific enough to fix without guessing, so it suits anything non-trivial before create_catalog.

NameRequiredDescriptionDefault
documentYesA foldsquare.catalog/v1 document

Output Schema

NameRequiredDescription
validYes
issuesYesProblems in a document that parses
summaryNoWhat the document would build
schemaIssuesYesThe document does not parse; fix these first

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint false, and openWorldHint false. The description adds useful behavior beyond that: it is free, writes nothing, returns every problem addressed by JSON path, and produces actionable diagnostics.

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 and efficient: it leads with the dry-run action and side-effect guarantee, then gives schema references and the create_catalog routing. A phrase or two could be trimmed, but no sentence is wasted.

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

Completeness5/5

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

Given the single required document parameter, output schema, and annotations, the description is complete enough for an agent to call it correctly. It covers the side-effect profile, output value, diagnostic quality, schema references, cost, and when to use it.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds valuable meaning by pointing to foldsquare://schemas/catalog-dsl.json for the grammar and foldsquare://schemas/product-fields.json for field IDs.

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: dry-run a catalog DSL document, compile and lint it, write nothing. It clearly distinguishes validation from mutation and explicitly routes non-trivial work before create_catalog.

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 it for anything non-trivial before create_catalog, because it returns the would-be output plus fixable issues. It doesn't explicitly cover when not to use it, but the intended workflow is clear.

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. 36 tool updates
    • First observedcreate_catalog
    • First observeddelete_catalog
    • First observeddelete_products
    • First observedduplicate_catalog
    • First observededit_catalog
    • First observedembed_catalog_in_store
    • First observedget_analytics
    • First observedget_catalog
    • First observedget_catalog_pdf
    • First observedget_product
    • First observedget_publish_options
    • First observedimport_products
    • First observedlist_catalog_shares
    • First observedlist_catalog_snapshots
    • First observedlist_catalogs
    • First observedlist_collections
    • First observedlist_images
    • First observedlist_leads
    • First observedlist_product_facets
    • First observedlist_templates
    • First observedopen_publish_settings
    • First observedpick_products
    • First observedpick_products_search
    • First observedpreview_catalog
    • First observedpreview_page
    • First observedpreview_page_image
    • First observedpublish_catalog
    • First observedrestore_catalog_snapshot
    • First observedsearch_products
    • First observedset_publish_options
    • First observedshow_analytics
    • First observedsync_catalog_products
    • First observedupdate_catalog
    • First observedupdate_product
    • First observedupload_image
    • First observedvalidate_catalog

Publisher details

Operator
Now In Store Inc.
Vendor relationship
First-party
Restrictions
Requires a Foldsquare account: https://foldsquare.nowinstore.com/register ; sign-in via OAuth

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables agents to search a public product catalog, inspect product details and variants, browse collections, find gifts by occasion, and generate cart links for users to review and complete checkout themselves.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural-language setup and management of a governed digital product catalog, including schema, products, and rules, with dry-run previews, audit logging, and two-phase confirmations for destructive actions.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources