Skip to main content
Glama

Server Details

PageHub is a website builder, and this server lets your AI agent do the building. Ask for a site and the agent picks a template, adds pages from a library of ready sections, sets colors and fonts, and fills in your copy and photos. It can screenshot the draft in a real browser and run SEO and accessibility checks before you look.

Every change lands in a draft. Nothing goes live until you or the agent publishes, so it's safe to point at a site that's already up. When you're ready, publish to a f

Ownership verified
Status
Healthy
Uptime
99.3% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.4/5.0

Scored across 87 tools

Disambiguation3/5

The server has many well-described tools, but several clusters overlap: add_nodes vs insert_node vs apply_kit_block for node creation, upload_file vs upload_image for media, patch_site_node vs patch_site_bulk, and multiple domain-management tools. Descriptions generally disambiguate, but the volume and near-pairs make misselection plausible.

Naming Consistency4/5

Nearly all tools use snake_case with a verb-first pattern (list_sites, create_site, update_page, delete_node), giving a predictable convention. Minor deviations exist—stripe_* uses a vendor prefix, and similar actions use different verbs (add/insert/create) or singular/plural forms—but the set is readable and consistent overall.

Tool Count1/5

87 tools is far beyond the 3–15 sweet spot and exceeds even the 50+ extreme-mismatch threshold. While the platform is broad, the count imposes a heavy selection burden and dilutes discoverability.

Completeness5/5

Coverage is exceptionally broad: site/page/node lifecycle, blocks/templates, collections and rows, media, domains, redirects, SEO/accessibility audits, emails, payments, members, downloads, portal, chat, theming, and imports. Only minor gaps (e.g., get_site/get_page read helpers, media deletion, removing existing members) exist, and agents can work around them.

Available Tools

87 tools
add_nodesAdd nodesAInspect

Build a section: a flat map of new nodes plus the rootNodeId to attach under parentId (default page_home). The default way to design a section for this business. Each node: type.resolvedName, isCanvas, props (className, custom.displayName), parent, nodes[], linkedNodes: {}. The map holds only new nodes; get_block shows example shapes. Contract: get_style_reference({ topic: "editing" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nodesYesFlat map { nodeId: node }.
parentIdNoExisting parent (default page_home).
positionNoIndex in the parent (default: end).
modifiersNo{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only needed when className uses shortcut modifier names. See get_style_reference({ topic: "editing" }).
rootNodeIdYesThe single top-level node in `nodes` to attach.
buttonValidationNooff | warn | fix (default) | strict, for Buttons in the payload.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare non-readOnly, non-idempotent, non-destructive. The description adds one meaningful behavioral constraint beyond that: 'The map holds only new nodes,' telling the agent this call will not update existing nodes and that get_block must be consulted for shapes. It does not cover failure behavior, id generation, or whether the operation is atomic for multi-node payloads.

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

Conciseness4/5

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

Purpose and scope are front-loaded, and the node-shape and reference lines earn their space. The node-shape sentence is a dense fragment dump that costs some readability, but there is no filler.

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

Completeness4/5

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

For a mutation tool with a nested object payload and no output schema, the description supplies the payload structure, the attachment semantics, the parent default, and pointers to get_block and get_style_reference. It stops short of describing the response or id handling, but an agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by decoding the otherwise opaque `nodes` object (type.resolvedName, isCanvas, props, parent, nodes[], linkedNodes) and clarifying rootNodeId as 'the single top-level node in nodes to attach.' This is genuine added meaning over the schema's 'Flat map { nodeId: node }'.

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 ('Build a section') plus the exact payload shape ('a flat map of new nodes plus the rootNodeId to attach under parentId'). The batch/section-building scope is clear, but it never contrasts itself with the sibling insert_node, so an agent must infer the boundary between the two node-creation 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?

'The default way to design a section for this business' gives clear positive context and the 'Contract: get_style_reference({ topic: "editing" })' line establishes a concrete prerequisite. No explicit when-not guidance or named alternative (e.g. insert_node for single nodes) is provided.

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

add_pageAdd pageAInspect

Create a page (a type "page" Container under ROOT; the first page is home). Returns the pageId that apply_kit_block and add_nodes take. seo.title + seo.description can be set here. Guide: get_style_reference({ topic: "pages" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
seoNoPer-page SEO.
nameYesDisplay name; becomes the slug ("Our Services" → /our-services).
positionNoIndex among ROOT's children (default: before the footer).
is404PageNoServe it for unmatched routes.
isHomePageNoMake it the home page (unsets the current one).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the mutating, non-reversible-on-retry profile is covered. The description adds two things annotations cannot: the return contract (the pageId consumed by sibling tools) and the behavioral nuance that the first page is home — meaningful given there is no output schema.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the core action, with no filler. The phrasing "a type 'page' Container under ROOT" is slightly jargon-heavy, which costs a point against the cleanest possible front-loading.

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

Completeness4/5

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

For a 6-parameter, nested-object tool with no output schema, the description covers the domain placement, the return value, and the applicable SEO fields, plus a guide pointer. It leaves the non-SEO parameters (position, is404Page, isHomePage) to the schema, which documents them fully.

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%, including the nested seo object, so the schema already carries the parameter semantics. The description's mention of seo.title and seo.description repeats schema-level detail rather than adding syntax, defaults, or interactions, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ("Create a page") and then pins down the domain model: a type "page" Container under ROOT, with the first page becoming home. This lets an agent separate it from update_page, delete_page, and add_nodes without opening any schema.

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

Usage Guidelines4/5

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

Gives clear sequencing context by naming the consumers of the returned pageId (apply_kit_block, add_nodes) and routing to get_style_reference({ topic: "pages" }) for further guidance. It stops short of any explicit when-not-to-use or alternative-selection rule, so it is clear context rather than full routing.

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

apply_kit_blockApply kit blockA
Destructive
Inspect

Stamp a section as-is: a library block (slug) or a clone of a page section already on this site (sourceNodeId) — exactly one. A shortcut for when an existing pattern genuinely fits; to design a section for this business, use add_nodes with get_block as reference. contentOverrides sets the final copy in the same call, keyed by the block's lib_* ids. target "header" / "footer" replaces the site header/footer with a nav/footer block; heroes are page sections. Guide: get_style_reference({ topic: "blocks" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugNoBlock slug from search_blocks. Not with sourceNodeId.
pageIdNoTarget page (default page_home).
targetNopage (default) | header (replaces hdr_root) | footer (replaces ftr_root).
positionNoIndex among the page's sections (default: end).
sourceNodeIdNoPage section on this site to deep-clone with fresh ids. Page target only.
propOverridesNoJSON object: displayName → { className, replaceClassName?, props }. className merges unless replaceClassName: true. Arrays for repeated names.
contentOverridesNoJSON object: node displayName → { text, url, alt, src, … }. Repeated names take an array, consumed in DFS order, e.g. { "Heading": { "text": "Our Services" }, "Title": [{ "text": "SEO" }, { "text": "PPC" }] }.
sectionContainerIdNoExisting empty section to fill (skeleton fills). Omit otherwise.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent; the description adds real context beyond that by disclosing that target 'header'/'footer' REPLACES the site header/footer, and that contentOverrides sets final copy in the same call. It stops short of stating reversibility or required permissions, so not a 5.

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

Conciseness4/5

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

Front-loaded with the core action and mode selection, then constraints, then alternatives and guide link. Dense but each clause carries information; only slightly long.

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 complex 9-param, destructive, no-output-schema tool, it covers the critical decision points (which mode, header/footer replacement, copy overrides, alternative tool, guide). Missing only return/result behavior and permission requirements, which are secondary.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning: the 'exactly one' rule for slug/sourceNodeId, the header/footer replacement semantics, and that contentOverrides is keyed by the block's lib_* ids. This goes beyond the raw schema 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 ('Stamp a section as-is') and resource, and enumerates the two mutually exclusive modes (library `slug` vs clone of `sourceNodeId`). It clearly distinguishes itself from the sibling add_nodes, so an agent can tell what this does without opening the schema.

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

Usage Guidelines5/5

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

Explicitly frames the tool as 'a shortcut for when an existing pattern genuinely fits' and names the alternative path ('to design a section for this business, use add_nodes with get_block as reference'). It also points to a guide via get_style_reference, covering when and when-not.

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

audit_accessibilityAudit accessibilityA
Read-only
Inspect

WCAG audit of a site or template page: contrast, alt text, headings, ARIA, interactive elements. Returns violations by severity with node ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id. Not with templateSlug.
levelNoDefault AA.
pageIdNoPage id (default page_home).
templateSlugNoTemplate to audit instead of a site.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value on the read side by disclosing the return shape ('violations by severity with node ids'), which matters given there is no output schema. It stops short of noting scope limits or runtime cost.

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

Conciseness5/5

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

Two compact sentences with zero filler; the core purpose is front-loaded and the return information follows immediately. Every clause 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?

With no output schema, the description usefully compensates by describing the violation output and its ordering. Combined with a fully documented 4-parameter schema, an agent has what it needs, though prerequisites such as whether the page must be published are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents id, level (with default AA), pageId (default page_home), and templateSlug. The description's 'site or template page' phrasing merely echoes the schema's mutual-exclusion note and adds no format or semantic detail beyond it.

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

Purpose5/5

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

States a specific verb and resource ('WCAG audit of a site or template page') and enumerates the checks performed (contrast, alt text, headings, ARIA, interactive elements), which clearly separates it from the sibling audit_seo. An agent can identify and distinguish it without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied: run this to check accessibility for either a site or a template page, and the schema's id/templateSlug notes encode the mutual exclusion. However, the description never states when to prefer this over audit_seo or any prerequisite (e.g. published vs draft page).

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

audit_seoAudit SEOA
Read-only
Inspect

Score a site or template page for SEO: meta, heading hierarchy, alt text, link text, content depth. Returns fixes with node ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id. Not with templateSlug.
pageIdNoPage id (default page_home).
templateSlugNoTemplate to audit instead of a site.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. On top of that the description discloses the return shape ('Returns fixes with node ids'), which matters because no output schema exists. It could still say whether the audit is static or fetches live pages, but the added return-value context is real value beyond the annotations.

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

Conciseness5/5

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

One sentence, front-loaded with the action and scope, then the checked dimensions and the return contract. No filler and nothing repeated.

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

Completeness4/5

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

With no output schema, the description usefully notes that fixes with node ids are returned, and the read-only annotations cover side-effect behavior. It is complete enough to invoke correctly, though it omits output format detail (e.g., severity, pagination) that might matter for a broad audit.

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 explains id, pageId and templateSlug, including the 'Not with templateSlug' exclusion. The description only restates that a site or template can be targeted, adding no syntax or default details beyond the structured fields. 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?

Specific verb ('Score') plus resource ('a site or template page') plus an enumerated list of what is scored (meta, heading hierarchy, alt text, link text, content depth). This clearly separates it from the sibling audit_accessibility, which the agent can infer covers a different concern.

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 phrase 'a site or template page' implies the two usage modes (id vs templateSlug), but the description never states when to choose a template audit over a site audit, nor does it name or exclude the related audit_accessibility sibling. Usage must be inferred from the schema constraints rather than the prose.

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

check_domainCheck domainA
Read-only
Inspect

Preflight a candidate domain (apex + www): free, attached or erroring, plus the DNS records it would need. Changes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
domainYesCandidate domain, e.g. "example.com".

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so "changes nothing" is largely redundant. The description does add real value beyond the annotations, though: it discloses that both apex and www are checked and that the response reports free/attached/erroring state plus required DNS records.

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 sentence with zero filler; the core verb and scope are front-loaded and the non-mutating guarantee is tacked on efficiently at the end.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so (free/attached/erroring, DNS records to add). Combined with annotations covering the safety profile, nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented. The description clarifies that the domain argument is a "candidate" (not the attached) domain but adds no syntax or format beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

"Preflight a candidate domain (apex + www)" gives a specific verb-like action, a precise resource scope, and the outcomes checked (free/attached/erroring). It clearly reads as a non-mutating inspection, but it never names the closest sibling (get_domain_status) so the agent must infer the distinction itself.

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

Usage Guidelines4/5

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

"Preflight a candidate domain" and "Changes nothing" place it squarely in the pre-set_domain validation slot, giving clear usage context. However it names no exclusion or alternative, so an agent choosing between this and get_domain_status gets no explicit routing rule.

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

clear_domainClear domainA
DestructiveIdempotent
Inspect

Remove the custom domain from the active site. Detaches both apex and www variants from Vercel and resets redirectMode to none.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so safety is covered structurally. The description adds real value beyond them by naming exactly what is destroyed (both apex and www variants detached from Vercel) and the side effect of resetting redirectMode to none, though it says nothing about permissions or downstream propagation.

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

Conciseness5/5

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

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

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

Completeness4/5

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

For a single-parameter mutation with no output schema, the description covers what is removed and what changes on the backend, which is what an agent needs to call it correctly. Return behavior and whether the change is reversible are left unstated.

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

Parameters3/5

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

Only one parameter, and schema description coverage is 100% ('Site id.'), so the schema already documents it fully. The description adds nothing about the id beyond implying it targets the active site; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (remove the custom domain from the active site) and the exact scope (apex and www variants, Vercel). An agent can distinguish it from set_domain, check_domain, get_domain_status and set_domain_redirect_mode without opening any schema.

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

Usage Guidelines4/5

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

The scenario is unambiguous: this is the teardown counterpart to set_domain, and 'from the active site' anchors it to the currently selected site. No explicit exclusions or named alternatives are given, so it stops short of a 5.

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

create_collectionCreate collectionBInspect

Create a collection. schema = [{ key, label, type, required?, default?, help?, … }]; types: text, number, boolean, date, select, image, url, email, color, richText, media, json. Source defaults to manual. Plan-gated.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nameYesDisplay name.
slugYesLowercase slug, [a-z][a-z0-9-]*.
schemaNoField definitions (shape in the tool description).
sourceNo{ type: 'manual' } (default) | airtable | csv-upload | google-sheet | webhook-feed | external-db.
isPublicNoVisitors can read rows without auth.
descriptionNoWhat it holds.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds real context — 'Plan-gated' signals a permission/plan prerequisite. It does not disclose failure behavior (e.g., slug collision) or what a successful creation returns.

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

Conciseness4/5

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

Front-loaded with purpose, then dense supporting detail in two compact sentences with no filler. The nested-field shape and type list earn their place, though the terse enumeration style borders on cryptic.

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

Completeness3/5

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

No output schema and no return-value description, so an agent must infer that a collection is returned. The nested `schema` object is well covered, but slug-uniqueness/error behavior and post-creation lifecycle are omitted for a nested-object creation tool.

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

Parameters4/5

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

Top-level schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it specifies the shape of each item in the `schema` array (key, label, type, required, default, help) and enumerates the allowed field types, none of which the schema supplies since items are an untyped object.

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?

Clear specific verb+resource ('Create a collection'), which an agent can distinguish from row-level siblings like create_collection_row. However it never names or differentiates against sibling tools directly, so sibling routing is left to inference.

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?

No explicit when-to-use or when-not guidance. 'Plan-gated' and 'Source defaults to manual' hint at prerequisites and a default path, but there is no statement of alternatives (e.g., update_collection_schema once a collection exists) or conditions for choosing them.

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

create_collection_rowCreate collection rowAInspect

Create one row. data maps field key → value, validated against the schema. Plan-gated.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
dataYesField key → value.
slugYesCollection slug.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnly=false, destructive=false, and idempotent=false, so the safety profile is partly covered. The description adds meaningful context beyond them: 'validated against the schema' and especially 'Plan-gated,' which signals a non-obvious precondition the annotations don't convey.

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 fragments, front-loaded with the core action, and every clause carries information (validation, plan-gating). No filler, though the fragmentary style is terse enough that structure is minimal.

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

Completeness3/5

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

For a 3-param mutation with a nested object and no output schema, the description covers the essentials and flags plan-gating, but omits what a successful create returns, how validation failures surface, and any required site/collection selection context. Minimum viable.

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 all three parameters, making the baseline 3. The description restates that `data` maps field key → value and adds the validation note, but adds little syntax or format detail beyond the schema.

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

Purpose4/5

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

States a specific verb (Create) and resource (one row), which distinguishes it from the bulk sibling create_collection_rows and from update_collection_row. It doesn't name the sibling explicitly, but 'one row' clearly implies singular creation, so it's clear though not fully differentiated in prose.

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

Usage Guidelines3/5

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

Usage is implied by 'Create one row' versus the plural create_collection_rows sibling, but there's no explicit when-to-use guidance, no prerequisite for selecting a site/collection first, and no routing to alternatives. Adequate but leaves inference to the agent.

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

create_collection_rowsCreate collection rowsAInspect

Insert up to 500 rows (field key → value) in one call, validated all-or-nothing (errors name the rowIndex). Plan-gated. Big CSVs: import_collection_csv.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
rowsYesRow objects, max 500.
slugYesCollection slug.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the generic write profile (readOnly=false, destructive=false, idempotent=false); the description adds non-obvious behavior the annotations can't express: all-or-nothing atomic validation, errors that name the failing rowIndex, a 500-row cap, and a plan-gated prerequisite. This is exactly the context an agent needs before committing a bulk write.

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 telegraphic clauses, front-loaded with the operation and its limits; the sibling pointer is placed last where it belongs. No filler or restatement of the title.

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

Completeness4/5

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

For a mutation tool whose safety profile is covered by annotations, the description supplies atomicity, limits, error shape, plan gating, and an alternative route. The only real omission is any hint of the success response, which is minor given no output schema is required to be explained.

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 slug, rows, and id; baseline would be 3. The description goes slightly beyond by clarifying that each row object is a field key → value map and by restating the 500 max on rows, which helps the agent build the payload correctly.

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 (insert rows into a collection) plus scope (up to 500, one call), and implicitly distinguishes itself from the single-row sibling create_collection_row by stating batch capacity. An agent can identify the tool from the first clause alone.

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

Usage Guidelines4/5

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

Routes the agent explicitly to import_collection_csv when the payload is a big CSV, and the 500-row ceiling implies the threshold for switching. It does not state a negative condition beyond that (e.g., use create_collection_row for a single row), but the batch-size cue covers the main routing decision.

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

create_siteCreate siteAInspect

Create a site from a template (default "acme", the blank starter) and return its id. Takes no node map; the site is built up afterwards with the section and node tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSite slug.
titleNo<title>.
templateNoTemplate slug (default "acme").
descriptionNoMeta description.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds meaningful context beyond annotations: it returns the site id (the id output matters for the following steps) and clarifies that no node map is provided, so the site is populated afterward. That sequencing info is genuinely useful.

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

Conciseness5/5

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

Two tight sentences front-loaded with the core action and default template, plus an important behavioral note. No wasted words.

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

Completeness4/5

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

For a simple create tool with no output schema, the description covers the essentials: return value (id) and the workflow (no node map, build afterward). It could mention the template requirement or prerequisites, but the coverage is solid.

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 all four params (name, title, template, description). The description only echoes the template default, adding little beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (Create) and resource (site) from a template, and notes the default template. It doesn't explicitly distinguish itself from sibling creation tools like duplicate_site or pull_template, but the resource and mechanism are 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?

Implies usage ('create a site from a template') but gives no explicit when-to-use vs. alternatives such as duplicate_site. The note that the site is built up afterwards is contextual guidance but not a when/when-not directive.

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

delete_collectionDelete collectionB
DestructiveIdempotent
Inspect

Delete a collection and all its rows. No undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugYesCollection slug.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description does add real value beyond the annotations by disclosing the cascade scope ('all its rows') and irreversibility ('No undo'), but says nothing about permissions or what the response reports.

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

Conciseness5/5

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

Two brief sentences, with the destructive scope front-loaded ahead of the irreversibility warning. Nothing is wasted.

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

Completeness4/5

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

There is no output schema, but for a destructive delete the essential facts – cascade scope and no-undo – are present. Missing detail on permissions and result reporting is minor.

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

Parameters3/5

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

Schema coverage is 100%: both 'id' and 'slug' are documented in the schema. The description mentions the collection but adds no format, scoping, or precedence guidance (e.g., whether slug or id wins), so the baseline 3 is appropriate.

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 (delete) and resource (collection), and the phrase 'and all its rows' pins down the cascade scope that separates it from delete_collection_row. It stops short of naming that sibling, so an agent must infer the contrast.

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?

The description warns 'No undo' but never says when to use this versus delete_collection_row, update_collection_schema, or other collection tools. There is no explicit alternative routing or prerequisite (e.g., permission or site-scoping) guidance.

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

delete_collection_rowDelete collection rowC
DestructiveIdempotent
Inspect

Delete one row from a collection by rowId.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugYesCollection slug.
rowIdYesRow _id.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that — no mention of irreversibility, permission requirements, or behavior when the rowId does not exist. With annotations doing all the work, the description contributes essentially no additional 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?

A single front-loaded sentence with no filler or repetition. It is efficient, though arguably too terse for a destructive operation.

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

Completeness3/5

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

For a destructive single-row delete with complete schema coverage and annotations covering the safety profile, this is minimally adequate. It omits any confirmation semantics or failure behavior, but with no output schema there is no return-value burden.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (id, slug, rowId) documented in the schema itself. The description only restates that rowId selects the row, adding no format or constraint detail beyond the schema. Baseline 3 applies when the schema carries the load.

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

Purpose4/5

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

The description names a specific verb (Delete), resource (row), and scope (one row from a collection) identified by rowId. It implicitly distinguishes itself from delete_collection (whole collection) but does not name any sibling explicitly.

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?

No guidance on when to use this versus delete_collection, delete_node, or delete_page, and no prerequisites or warnings. The agent must infer usage entirely from the name.

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

delete_nodeDelete nodeA
DestructiveIdempotent
Inspect

Delete a node and its subtree. ROOT, page_home, hdr_root and ftr_root can't be deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nodeIdYesNode id (from list_site_nodes / search_site_nodes).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds non-obvious behavior beyond that: the deletion is cascading ('and its subtree') and four protected sentinel nodes are rejected. It doesn't mention permission requirements or irreversibility, but the cascade and protected-node rules are meaningful additions.

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

Conciseness5/5

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

Two sentences, zero filler, and the core action is front-loaded ahead of the constraint. Every clause earns its place.

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

Completeness4/5

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

For a destructive mutation with a fully documented schema and annotations carrying the safety hints, the description covers the two things an agent most needs: that it cascades and which nodes are protected. No output schema exists, so nothing about returns is owed, but permission/auth prerequisites are left unstated.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents both id and nodeId, including the source hint (list_site_nodes / search_site_nodes). The description adds no parameter-level detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Delete) and resource (node) plus the important scope detail that the entire subtree goes with it. The resource 'node' is distinct from sibling delete operations (delete_page, delete_site, delete_collection), so an agent can route correctly.

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?

Provides explicit exclusions — ROOT, page_home, hdr_root and ftr_root cannot be deleted — which is real when-not guidance. It stops short of stating when to prefer this over siblings like delete_page or move_node, so it is clear context without full alternative routing.

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

delete_pageDelete pageA
DestructiveIdempotent
Inspect

Delete a page and its content. The last page can't be deleted; deleting home promotes the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
pageIdYesPage id, e.g. "page_about".

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description goes beyond that with genuinely non-obvious behavior: the last page is undeletable and deleting the home page promotes the next one. It still omits recoverability and permission requirements, but the added rules are real value.

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

Conciseness5/5

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

Two short sentences, zero filler, with the primary action stated first and the edge cases immediately after. Every clause earns its place.

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

Completeness4/5

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

For a destructive tool with no output schema, the description covers the cascade (content is deleted) and the two surprising edge cases an agent must not discover by accident. Missing only permission/authorization expectations and irreversibility, which would make it fully self-contained.

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 (id, pageId) are documented with examples in the schema, so the baseline is 3. The description adds nothing about the site-id vs page-id distinction or how the pair is interpreted.

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

Purpose4/5

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

States a specific verb + resource ("Delete a page") and clarifies scope by noting it removes the page's content too, which distinguishes it from delete_node, delete_collection, and delete_site. It stops short of explicitly naming a sibling, but the resource is unambiguous enough that an agent can route correctly.

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

Usage Guidelines3/5

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

Usage is implied by the obvious delete-a-page semantics, with no explicit statement of when to prefer delete_node or update_page alternatives. The two business rules given are constraints rather than selection guidance, and no prerequisites (permissions, auth) are mentioned.

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

delete_siteDelete siteC
DestructiveIdempotent
Inspect

Delete a site. Requires an explicit id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSite id to delete.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is fully covered by structured data. The description only adds 'Requires an explicit id,' which is a restatement of the required field rather than new behavioral context such as permanence, cascade effects, or auth requirements.

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 with the action front-loaded and no wasted prose. The second sentence is mildly redundant given the schema marks id as required, keeping it just below a perfect score.

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

Completeness3/5

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

For a single-parameter, no-output-schema tool whose annotations carry the destructive and idempotent profile, the description is minimally sufficient. It omits any note on irreversibility or side effects, which would be valuable for a destructive operation.

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 single 'id' parameter is already fully documented as 'Site id to delete.' The description's 'Requires an explicit id' adds no syntax, format, or constraint detail beyond the schema, matching the baseline 3.

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

Purpose4/5

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

States a specific verb and resource ('Delete a site'), which is unambiguous and distinguishable from sibling mutations like delete_page or delete_collection by the resource noun alone. It does not explicitly contrast with those siblings, but the target resource is clear.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as delete_page, unpublish_site, or duplicate_site, and no mention of prerequisites (permissions, confirmation, or irreversibility handling). Usage must be inferred entirely from the name.

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

duplicate_siteDuplicate siteAInspect

Copy a site you're a member of into a new site you own (content, title, description, portal, crawlPolicy). Domain and published state are not copied. The copy becomes active.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSource site id.
nameNoSlug for the copy.
titleNoTitle override.
descriptionNoDescription override.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by enumerating exactly what is copied (content, title, description, portal, crawlPolicy) and what is not (domain, published state), plus the resulting state ('becomes active'). This is the kind of behavioral detail an agent needs before mutating state.

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

Conciseness5/5

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

Two tightly packed sentences with no filler; the copy scope and the not-copied caveats are front-loaded and immediately actionable.

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

Completeness4/5

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

For a mutation tool with no output schema, annotations already cover the safety profile and the description covers copy semantics thoroughly. The remaining gap is the absence of any note on the all-optional schema, where duplication realistically requires the source id.

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 id/name/title/description. The description adds only that title and description function as overrides and lists copied fields, but does not explain the 'name' slug parameter or that id is practically required despite the schema marking nothing as required.

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 (copy) and resource (site), plus the precise scope: source must be a site you're a member of, destination is a new site you own. This clearly distinguishes it from create_site and pull_template among siblings.

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

Usage Guidelines4/5

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

Provides concrete pre-conditions ('a site you're a member of' into 'a new site you own') that tell the agent when this tool applies, but never names alternatives (create_site, pull_template) or exclusion conditions.

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

find_iconFind iconA
Read-only
Inspect

Search every icon set; returns ranked ref-icon:<set>/<Name> refs for Icon nodes and Button/Link icon.value. Tabler (tb) lacks many brand logos; brands come from fa / si / … and appear in the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesKeyword, e.g. "yelp", "shopping cart".
setNoRestrict to one set, e.g. "tb", "fa", "si".
kindNobrand = logo sets; ui = Tabler only.
limitNoDefault 12, max 50.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context: the ranked ref format returned and the coverage limitation of the tb set for brand logos, which the annotations do not convey.

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 dense sentences with no filler, and the core behavior (search all sets, return ranked refs) is front-loaded before the caveat about Tabler and brand sets. Slightly telegraphic, but every clause 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?

There is no output schema, so the description usefully explains the return format (`ref-icon:` refs and their consumers). For a simple read-only search tool with full schema coverage and clear annotations, this is nearly complete; only cross-tool routing guidance is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (q, set, kind, limit) are already documented in the schema, including the kind enum and the limit default. The description's note that brands live in fa/si adds a little color for set/kind selection but no syntax or format beyond the schema, so the baseline 3 holds.

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 (Search) plus scope (every icon set) and specifies the return artifact (`ref-icon:<set>/<Name>` refs) and where they are used (Icon nodes, Button/Link icon.value). This clearly separates it from siblings like find_image and find_video.

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 implies set-selection guidance ('Tabler (tb) lacks many brand logos; brands come from fa / si / …'), which helps pick a set or the brand kind. However, it never states when to use this tool versus the obvious siblings (find_image, find_video) or any prerequisites, 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.

find_imageFind imageA
Read-only
Inspect

Stock photos with verified, ready-to-use URLs (local bank, then Unsplash/Pexels).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoKeywords, e.g. 'bakery interior'.
countNoDefault 3, max 6.
categoryNohero/background = wide; avatar = faces; product = objects; team = groups.
providerNoDefault pexels.
orientationNoDefault landscape.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral detail not in the annotations: the provider fallback order (local bank first, then external providers), which tells the agent results may come from different sources.

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 front-loaded sentence with zero filler; the parenthetical earns its place by conveying the provider fallback. Nothing is wasted.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining returns, and 'verified, ready-to-use URLs' only partially covers it — it does not say whether results are a list, what fields come back, or whether attribution/licensing applies to the stock providers. Adequate for a read-only lookup, but there are gaps.

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 q, count, category, provider, and orientation are already fully documented with enums and defaults. The description adds no additional parameter semantics beyond the schema, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific resource (stock photos with ready-to-use URLs) and implicitly distinguishes itself from siblings like find_icon, find_video, and upload_image by naming the medium. It does not name those siblings explicitly, so an agent must infer the boundary from the resource type alone.

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 only implied: the mention of 'local bank, then Unsplash/Pexels' hints at a provider fallback, but there is no explicit when-to-use guidance versus find_icon/find_video or upload_image. Nothing tells the agent when not to use it.

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

find_videoFind videoB
Read-only
Inspect

Stock videos with direct MP4 URLs (Pexels) for Video nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoKeywords, e.g. 'coffee pouring'.
countNoDefault 3, max 6.
providerNoOnly pexels.
maxDurationNoMax seconds.
minDurationNoMin seconds.
orientationNoOrientation filter.

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety and network profile are covered. The description adds that results are Pexels stock videos with direct MP4 URLs, which is modest additional context. It does not describe return shape, pagination, rate limits, or whether results are cached.

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?

It is a single compact sentence with no filler, and the key differentiator (direct MP4 URLs from Pexels) is front-loaded. Every clause earns its place.

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

Completeness3/5

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

For a read-only lookup tool with a fully described schema and safety annotations, the description is minimally adequate. However, it stops short of explaining what a caller receives (MP4 URLs to attach to Video nodes) or how to use the results, leaving a gap for an agent that needs to wire the output into add_nodes or insert_node.

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 every parameter (q, count, provider, maxDuration, minDuration, orientation) is already documented in the schema. The description adds no parameter syntax or defaults beyond what is already present, so the baseline 3 applies.

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

Purpose3/5

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

The description names the resource ('Stock videos') and adds useful specifics (direct MP4 URLs, Pexels source, intended for Video nodes), but the verb is implied rather than stated — it never says 'find' or 'search'. Sibling tools find_image and find_icon exist, so a clearer distinction between these 'find_*' tools would help, and those aren't referenced.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance or mention of alternatives. The phrase 'for Video nodes' implies a context, but there is no statement of when this tool should be chosen over find_image, find_icon, or upload_file. No exclusions or constraints on usage are provided.

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

generate_button_classesGenerate button classesA
Read-only
Inspect

Canonical Button className + activeModifiers from intent (variant, shape, size). A starting point; extra classes can be appended.

ParametersJSON Schema
NameRequiredDescriptionDefault
ctaNoAdd CTA spacing / min-height (default true).
sizeNosm | md | lg (default md).
shapeNoe.g. rounded-box (default) or rounded-full.
variantNoprimary | outline | ghost (default primary).
emphasisNodefault | neon (primary only).
responsiveNoFull width on mobile, auto on desktop (default true).
extraClassesNoExtra classes to append.
includeModifiersNoAlso return activeModifiers (default true).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this as a readOnly, non-destructive, closed-world generation tool, so the safety profile is covered. The description adds that the output is a foundation to which classes can be appended, which is useful context but not rich behavioral detail (e.g., determinism, defaults).

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

Conciseness5/5

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

Two short sentences with no waste; the return artifacts are front-loaded before the usage caveat. Every clause earns its place.

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

Completeness4/5

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

There is no output schema, so the description helpfully names what is returned (className + activeModifiers), and annotations cover the safety profile. Complete enough for an 8-param, all-optional generation tool, though the relationship to validate_button_classes is left unstated.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already documents its own defaults and example values, so the schema does the heavy lifting. The description merely echoes variant/shape/size without adding syntax or meaning beyond 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 (generate) and resource (Button className + activeModifiers) plus the inputs that drive it (variant, shape, size). It clearly identifies the tool as a class-string generator, though it does not explicitly distinguish itself from the sibling validate_button_classes.

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?

"A starting point; extra classes can be appended" implies a workflow context, but there is no explicit when-to-use guidance or mention of the alternative validate_button_classes. Usage is only weakly implied.

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

get_blockGet blockA
Read-only
Inspect

Get a library block's full tree by slug — reference for hand-building with add_nodes. Counts as a use.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesBlock slug.

TDQS

A4.2/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, not open-world). The description adds meaningful context beyond them: 'Counts as a use,' which discloses a quota/billing side effect an agent should know about.

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 tight sentence with the core purpose front-loaded and no wasted words. Both clauses earn their place.

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

Completeness4/5

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

For a simple single-param read tool with full schema coverage and annotations, this is nearly complete; 'full tree' hints at the return shape despite no output schema. Minor gap: no mention of error behavior for unknown slugs.

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% for the single slug parameter, so the schema does the documenting. The description only restates 'by slug' without adding format or constraint detail. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Get) and resource (a library block's full tree) scoped by slug, clearly distinguishing it from siblings like list_blocks, search_blocks, and list_block_nodes. An agent can tell what it returns 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 phrase 'reference for hand-building with add_nodes' gives a concrete use context, linking it to the add_nodes sibling. It doesn't explicitly state when NOT to use it (e.g., vs list_block_nodes or search_blocks), so it falls short of a 5.

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

get_collectionGet collectionB
Read-only
Inspect

Read one collection's definition (schema fields, source, isPublic).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugYesCollection slug (unique per site).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the safe read-only, non-destructive, closed-world profile, so the safety burden is covered. The description adds useful context by naming what is returned (schema fields, source, isPublic), but says nothing about behavior on a missing/invalid slug or scope resolution between id and slug.

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 tight sentence with the verb and resource front-loaded and zero filler. Every clause earns its place.

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

Completeness4/5

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

For a simple read tool whose annotations carry the safety profile and whose parameters are fully documented, the definition is nearly complete, and it compensates for the absent output schema by naming the returned fields. It would be complete with a note on scope resolution or error behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented with maxLength and descriptions in the schema. The description adds no format or resolution details beyond what the schema provides, giving the baseline 3.

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

Purpose4/5

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

States a specific verb ("Read") and resource ("one collection's definition") and enumerates the content (schema fields, source, isPublic). "One" distinguishes it from the sibling list_collections, though it never names that sibling explicitly.

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?

No explicit when-to-use guidance, no prerequisites, and no alternative named. An agent must infer from "one" versus the plural list_collections and update_collection_schema siblings on its own.

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

get_component_schemaGet component schemaA
Read-only
Inspect

Full prop schemas for components (types, props, valid values). A comma list returns only those components. In parallel fill, responses are compact and components is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
componentsNoComma-separated names, e.g. "Container,Text,Button". Omit for all.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so safety is covered. The description adds a real behavioral trait beyond that — responses become compact in parallel fill and the optional parameter becomes required — which is useful context. However, 'parallel fill' is unexplained jargon, so the disclosure is only partially actionable.

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 with no filler, and the core capability is front-loaded before the parameter notes. The only cost is the undefined 'parallel fill' term, which a reader must decode.

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

Completeness3/5

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

For a single-optional-parameter read tool with no output schema, the description usefully sketches the return shape (types, props, valid values). It still leaves the 'parallel fill' mode and the resulting compact response format unexplained, which is the one piece of behavior an agent would need to interpret results 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% and the schema already explains comma-separated names and 'omit for all'. The description goes further by stating that a comma list acts as a filter and that components becomes mandatory in parallel fill mode — semantics not present in the schema, which lists zero required parameters.

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 resource and payload: full prop schemas for components, including types, props, and valid values. That distinguishes it from sibling getters like get_block or get_style_reference, though it never names those alternatives explicitly.

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?

Gives a conditional usage note ('a comma list returns only those components', 'in parallel fill ... components is required'), which implies when the parameter matters. But it never says when to call this tool versus get_block/get_style_reference, and the 'parallel fill' context is left undefined for an agent that has no such concept.

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

get_domain_statusGet domain statusA
Read-only
Inspect

Read the site's custom domain: redirect mode, apex/www Vercel state, and the exact DNS records the user needs to create. check preflights another domain without changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
checkNoCandidate domain to preflight.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is largely covered. The description still adds real context by disclosing what the read returns and explicitly reassuring that `check` makes no changes, which reinforces rather than contradicts the annotations.

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

Conciseness5/5

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

Two tight sentences: the primary read behavior and its output are front-loaded, and the secondary `check` mode follows. No filler or restated title text.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return content and does so by listing the domain facets returned. Combined with the annotation-covered safety profile, an agent has enough to call it correctly; only the sibling relationship to check_domain remains unaddressed.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are documented in the schema (id = site id, check = candidate domain). The description slightly enriches `check` by framing it as a non-mutating preflight, but adds no format or constraint detail beyond that, matching the baseline for fully-covered schemas.

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 a specific verb (Read) and resource (the site's custom domain) and enumerates the returned facets: redirect mode, apex/www Vercel state, and required DNS records. It does not, however, name the very similar sibling check_domain, leaving the agent to disambiguate from the name alone.

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 explains the `check` mode as a change-free preflight, which is genuine usage guidance for that parameter. But it never states when to call this instead of check_domain, set_domain, or set_domain_redirect_mode, so the selection logic against alternatives is only implied.

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

get_import_statusGet import statusA
Read-only
Inspect

Progress of an import_site run: status, page and media counts, warnings, redirects from the old page addresses. When status is ready it includes the new site id, editor link and preview link.

ParametersJSON Schema
NameRequiredDescriptionDefault
importIdYesFrom import_site.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive=false and closed-world, so the safety profile is covered. The description adds genuine behavioral context beyond that: state-conditional output ('When status is ready it includes the new site id, editor link and preview link'), which is the kind of detail annotations cannot express.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core purpose and followed by the return contents. No filler or redundancy.

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

Completeness5/5

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

No output schema exists, so the description carries the burden of describing returns — and it does comprehensively (status, counts, warnings, redirects, plus the ready-state fields). Nothing needed to call or interpret this tool is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single importId parameter is already documented ('From import_site.'). The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (returns the progress/status of an import_site run) and enumerates what it reports: status, page/media counts, warnings, redirects. An agent can immediately distinguish it from the write-side sibling import_site.

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 phrase 'Progress of an import_site run' and the param note 'From import_site' clearly establish the context: call this after import_site to track a run. No explicit exclusions or polling guidance are given, but the usage context is unambiguous.

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

get_portalGet portalB
Read-only
Inspect

Fetch the current portal configuration for a site.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description only adds the 'current configuration' framing and nothing about permissions or return shape, which is a modest addition over what the annotations say.

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

Conciseness4/5

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

One short, front-loaded sentence with zero filler. It is appropriately sized for a simple lookup, though the single sentence leaves no room for the disambiguation the sibling set invites.

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

Completeness3/5

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

For a read-only one-parameter lookup with annotations covering safety, the description is broadly adequate. However, with no output schema, it does not characterize what 'portal configuration' contains, leaving the agent guessing at the return payload.

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 'id' parameter is documented as 'Site id.', so the schema carries the parameter semantics. The description adds no format, sourcing, or default behavior beyond that.

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 ('Fetch') and resource ('current portal configuration for a site'), so the agent can distinguish it from set_portal and remove_portal by verb alone. It does not explicitly name those siblings or the disambiguation condition, keeping it 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 Guidelines3/5

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

Usage is implied: read the portal configuration when you need its current state, versus set_portal to change it or remove_portal to delete it. No explicit when-to-use, preconditions, or alternative is stated, so the agent must infer the routing.

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

get_site_chatGet site chatA
Read-only
Inspect

Read the site's chat bot settings: on/off, assistant name, greeting, owner instructions, which details it asks visitors for, where leads go, and whether the owner has AI credits (no credits = bubble hidden).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false/openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond them: that missing AI credits cause the chat bubble to be hidden, and that it exposes owner instructions and lead routing. It stops short of describing permissions or response shape.

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

Conciseness4/5

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

A single front-loaded sentence with the core action first and the field list after the colon. The list is somewhat enumerative but every item is informative, so it earns its length.

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

Completeness4/5

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

With no output schema, the description usefully compensates by enumerating what is read (on/off, name, greeting, instructions, lead capture, destination, credits). Nothing critical for correct invocation is missing, though permissions or error behavior are unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and there is a single id parameter documented as 'Site id.', so the schema carries the parameter burden. The description only refers to 'the site's' settings, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Read) and resource (the site's chat bot settings) and then enumerates the concrete fields returned. It is trivially distinguishable from the sibling set_site_chat (write counterpart) 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 Guidelines3/5

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

The read semantics are implied by 'Read' and reinforced by readOnlyHint, but there is no explicit when-to-use guidance and the sibling set_site_chat is never named as the alternative for modification. Usage is inferable rather than stated.

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

get_site_emailGet site emailA
Read-only
Inspect

Read one site email: subject, preheader, node tree, allowed {{variables.*}} and EmailSlot nodes (keep required slots exactly once). Emails use only Container, Text, Button, Image, EmailSlot and email-safe classes (no btn/card/shadow/gradient/absolute).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
kindYesEmail kind from list_site_emails.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely useful content context (only Container/Text/Button/Image/EmailSlot and email-safe classes, no btn/card/shadow/gradient/absolute), but says nothing about errors, auth, or what happens if a slot is duplicated or missing.

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

Conciseness4/5

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

Two sentences with the core action front-loaded and the structural constraints packed into the second. Dense but each clause carries real information; the parenthetical constraint is slightly awkward but earns its place.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does list the returned elements plus the allowed node/class vocabulary. It stops short of explaining how the node tree is addressed for later edits, which a caller of add_nodes/update_site_email would likely need.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in the schema (including the 8-value kind enum sourced from list_site_emails). The description adds no format or constraint detail for id/kind, so the baseline 3 applies.

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

Purpose5/5

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

Starts with a specific verb+resource ('Read one site email') and enumerates the payload it returns (subject, preheader, node tree, variables, EmailSlot nodes), which clearly separates it from list_site_emails, preview_site_email, and update_site_email.

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 gives an operational constraint ('keep required slots exactly once') but never states when to choose this over preview_site_email or update_site_email, nor the prerequisite 'id from list_site_emails' workflow end-to-end. Usage is implied by the word 'Read' rather than spelled out.

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

get_site_nodeGet site nodeB
Read-only
Inspect

Read one node's raw JSON. propsPatch replaces string props whole (e.g. ROOT.props.inject.head), so this is the current value to merge into.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nodeIdYesNode id, e.g. ROOT, page_home.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the return is 'raw JSON' and frames the result as a value to merge, which is mild extra context, but it discloses nothing about error behavior for missing nodes or the shape of the returned JSON.

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 core action, with no filler words. However, the second sentence is jargon-dense and grammatically compressed ('propsPatch replaces string props whole'), which costs some readability without adding length.

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

Completeness3/5

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

For a read tool whose annotations fully cover safety and whose schema fully documents both parameters, the description is close to adequate. It is still incomplete on what a node's raw JSON looks like and what happens on an unknown nodeId, and with no output schema the description is the only place that could have hinted at the return shape.

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

Parameters3/5

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

Schema description coverage is 100% with only two parameters (id, nodeId), and the schema already supplies examples like ROOT and page_home. The description adds no parameter-level meaning such as which identifiers are valid or how nodeId relates to the site id, so 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+resource: 'Read one node's raw JSON.' The word 'one' implicitly distinguishes it from list_site_nodes and search_site_nodes in the sibling set, but it never names those siblings, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

The second sentence hints at the use case (fetching the current value to merge before patching props), which implies a workflow with patch_site_node, but it never states when to use this tool versus list_site_nodes/search_site_nodes, and the phrasing 'so this is the current value to merge into' is elliptical enough that an agent must decode it.

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

get_style_referenceGet style referenceA
Read-only
Inspect

Styling reference: palette variables, styleGuide tokens, spatial scale, modifiers, interactive state, form-confirmation recipe. Pass topic for a focused guide (design bar, accessibility, domains, per-tool usage).

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoReturn one guide instead of the core reference.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the content inventory of the reference (tokens, modifiers, interactive state, form-confirmation recipe), which is useful context, but says nothing about auth, response size, or whether topics override the core reference beyond a hint.

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

Conciseness4/5

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

Two sentences, front-loaded with the content inventory followed by the parameter guidance. No filler, though the topic list in parentheses is somewhat loose against the actual enum and could have been omitted as redundant with the schema.

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

Completeness4/5

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

For a read-only, single-optional-parameter reference tool with no output schema and full annotation coverage, the description supplies enough — what the reference contains and what a topic yields. It could go slightly further on how topics relate to the core reference, but nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single enum is fully documented, so the baseline is 3. The description restates the parameter's effect and names a few topics (design bar, accessibility, domains, per-tool usage), but these only partially map to the 12 enum values and add little beyond 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?

The description names a specific resource (styling reference) and enumerates its contents — palette variables, styleGuide tokens, spatial scale, modifiers, interactive state, form-confirmation recipe — so an agent knows what it retrieves. It does not, however, distinguish itself from adjacent siblings like suggest_palettes, suggest_font_pairings, or get_component_schema, which also relate to styling.

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

Usage Guidelines3/5

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

The second sentence explains the `topic` parameter's effect (a focused guide vs the core reference) and hints at guide categories, which implies usage. But there is no explicit when-to-use guidance, no statement of when to prefer this over suggest_palettes or get_component_schema, and no prerequisites.

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

import_collection_csvImport collection CSVA
Destructive
Inspect

Import CSV text; header columns match field keys (unmatched ignored). mode: append (default), replace (deletes existing rows first), upsert (by an externalId or id column). ~8MB cap. Plan-gated.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
csvYesCSV text with a header row.
modeNoMerge mode. Default append.
slugYesCollection slug.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds genuinely new behavioral facts: replace deletes existing rows first, upsert keys off an externalId/id column, unmatched columns are silently ignored, there is an ~8MB cap, and the tool is plan-gated. It does not disclose the response shape or whether the import runs asynchronously.

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

Conciseness4/5

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

A single dense sentence pair, front-loaded with the core action and then the mode contract. Nearly every clause carries information, though 'CSV text' and the restated default slightly overlap with the schema.

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

Completeness3/5

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

For a destructive, plan-gated bulk mutation with no output schema, the description covers caps, mode behavior, and column handling well. It omits how failures/partial imports behave and, notably, never mentions async execution or status polling despite a get_import_status sibling existing, leaving a real gap for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches two parameters the schema describes only tersely: it explains the CSV header/field-key contract for `csv` and gives the actual merge semantics (and upsert key) behind the `mode` enum, which the schema's 'Merge mode. Default append.' does not convey.

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

Purpose4/5

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

States a specific verb (import) and resource (CSV rows into a collection, implied by the slug param and title). It distinguishes itself reasonably from create_collection_rows and import_site by naming the CSV format and the header-to-field-key matching rule, though it never explicitly says 'into a collection' in the body.

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 mode breakdown gives clear conditions for append vs replace vs upsert, which is real guidance on how to invoke it. However, it offers no when-to-use-this-vs-alternatives routing (e.g. vs create_collection_rows for small batches or import_site for whole sites), and no prerequisites beyond the plan gate.

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

import_siteImport HTML siteAInspect

Turn a static HTML site (index.html + pages, CSS, JS, images) into a NEW editable multi-page PageHub site draft. Inputs, one per call: filePath (local folder or .zip; local server only); size (zip bytes) returns an upload URL, curl line and uploadKey; uploadKey, after the PUT, starts the import; files sends text files inline (≤3MB). Returns an importId for get_import_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSite name (default: home page title).
sizeNoExact zip size in bytes → returns an upload URL.
filesNoInline files: path relative to the site root.
uploadKeyNoFrom the size step, after the PUT succeeded → starts the import.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations cover safety profile (readOnly=false, idempotent=false, destructive=false, openWorld=true). Description adds valuable workflow behavior: the size→upload URL→PUT→uploadKey sequence, the 3MB inline-file cap, and that it returns an importId for get_import_status. This is real context beyond 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?

Dense but earns its place; front-loads the purpose, then enumerates the three input modes compactly. Slightly telegraphic but no wasted sentences.

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

Completeness4/5

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

No output schema, but the description names the returned importId and points to get_import_status. Covers the staged upload mechanics and constraints well; minor gaps on error handling or cleanup of stale uploads.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents name, size, files, and uploadKey. Description restates the size/uploadKey linkage but adds little syntax detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource: turning a static HTML site into a NEW editable multi-page draft. Explicitly distinguishes from create_site (which builds a new site from scratch) and upload_image by scoping to full HTML-site import.

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?

Explains the multi-step workflow clearly (filePath / size→upload URL / uploadKey / files) and notes 'local server only' constraint. Does not explicitly exclude alternative tools or state when NOT to use it, but the staged flow gives strong context.

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

insert_nodeInsert nodeBInspect

Insert one node under an existing parent. node = { type: { resolvedName }, isCanvas, props: { className, …, custom: { displayName } }, nodes: [] }; parent and linkedNodes are set for you. Lists/tables: a Container with props.type "ul" | "li" | "table" | "tr" | "td" ….

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nodeYesNode definition (shape in the tool description).
nodeIdYesNew unique id, e.g. "ftr_links".
parentIdYesParent id.
positionNoIndex in the parent (default: end).
modifiersNo{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only needed when className uses shortcut modifier names. See get_style_reference({ topic: "editing" }).

TDQS

B3.3/5.0
Behavior3/5

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

Annotations establish a non-destructive, non-idempotent write. The description adds a genuine behavioral fact beyond them: parent and linkedNodes are populated automatically, so the caller need not supply them. It says nothing about duplicate-id handling or failure modes.

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 purpose is front-loaded in the first clause, then the node shape follows. It is dense but every sentence carries information; the trailing lists/tables note is somewhat compressible but earns its place as a usage example.

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

Completeness3/5

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

For a mutation tool with a nested free-form object and no output schema, the description covers the node shape and auto-set fields, which is the main need. It stops short on lifecycle concerns (id collisions, ordering effects) and enumerates only a couple of the many node types an agent might need.

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 does real work here by spelling out the otherwise opaque shape of the `node` object (type.resolvedName, isCanvas, props, nodes) that the schema only gestures at. It also illustrates list/table Containers, adding meaning the schema does not carry.

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 ('Insert one node under an existing parent'), and the singular scope is clear. It does not explicitly distinguish itself from the sibling add_nodes, so an agent must infer the singular/plural split rather than being told.

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?

No when-to-use or when-not-to-use guidance is given. The only routing is an incidental pointer to get_style_reference for modifier setup; alternatives such as add_nodes or move_node are never mentioned, leaving selection to inference.

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

invite_site_memberInvite site memberAInspect

Invite someone to a site by email as owner, editor (default) or viewer. Owner-only. Re-inviting refreshes the link.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
roleNoDefault editor.
emailYesEmail to invite.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare it is a non-read-only, non-destructive, open-world write; the description adds genuinely new behavioral context on top: the owner-only authorization requirement and that re-inviting an existing address merely refreshes the invite link rather than erroring. It still does not say whether an email is dispatched or what happens to the previous link's validity window.

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 compact sentences with zero filler; the operation, the role options and the re-invite caveat are all front-loaded where an agent will see them first.

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 three-parameter mutation with full annotation coverage and no output schema, the description covers operation, authorization, defaults and the re-invite edge case. Minor gaps remain around notification behavior and the resulting invite state, but nothing blocks a correct call.

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 id, role (with enum) and email. The description's role list and default duplicate the enum/default already encoded in the schema, adding no syntax or format detail beyond it.

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

Purpose4/5

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

States a specific verb and resource ('Invite someone to a site by email') plus the full role set, which makes it easy to separate from revoke_site_invite and list_site_members. It never names an alternative tool explicitly, so it stops short of the top-bar sibling differentiation.

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

Usage Guidelines4/5

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

'Owner-only' gives the permission prerequisite for calling it, and '(default)' tells the agent what happens when role is omitted. It does not state when *not* to use it (e.g. use revoke_site_invite to undo) or what happens if the person is already a member.

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

list_block_nodesList block nodesA
Read-only
Inspect

List a library block's node ids (lib_*) and displayNames — the keys apply_kit_block's contentOverrides / propOverrides use. Counts as a use.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesBlock slug.

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, openWorldHint=false, and destructiveHint=false, so safety is covered structurally. The description adds a behavioral trait not present in annotations: 'Counts as a use,' a quota/billing consequence that is genuinely useful for an agent deciding whether to call it.

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

Conciseness5/5

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

One sentence plus a short trailing clause; the resource and its purpose are front-loaded, and the quota note is kept to three words. No wasted prose.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns and does so (node ids and displayNames). It is complete enough to invoke correctly, though it doesn't state whether all nodes are returned or mention any size/pagination limit.

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 slug parameter is documented in the schema, so the baseline is 3. The description only implies the slug refers to a library block (via 'a library block's node ids') and adds no format or syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb (List) and resource (a library block's node ids and displayNames), and names the concrete artifact returned (lib_* keys). It also distinguishes itself from the sibling list_blocks by scoping to a single block's nodes and tying the output to apply_kit_block's override keys.

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 frames the output's purpose — the keys feed apply_kit_block's contentOverrides/propOverrides — which tells the agent when this tool is needed. It does not explicitly say 'call this before apply_kit_block' or state when not to use it, so it stops short of full when/when-not guidance.

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

list_blocksList blocksA
Read-only
Inspect

List library blocks (up to ~200) grouped by category: slug, name, tags. A broad menu; search_blocks ranks and filters. categories / styles arrays OR-match in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoOne vibe; auto-set from the site's buildStyle.
stylesNoOR-filter by several vibes.
categoryNoOne category (merged with categories).
categoriesNoOR-filter by several categories.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safe read profile (readOnlyHint=true, destructive=false, openWorld=false), and the description adds real context beyond them: the ~200-result cap, category grouping, and the returned fields. It doesn't discuss pagination or ordering, but the cap implies a single bounded call, so the coverage is solid.

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?

Purpose is front-loaded in the first sentence, the sibling routing comes next, and the parameter nuance closes in a short clause. No filler, no repetition of what the schema already lists verbatim.

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

Completeness4/5

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

For a read-only, zero-required-parameter list tool with no output schema, the description covers result scope, grouping, fields, filter semantics, and the alternative tool. The only thin spot is ordering/pagination behavior, which the ~200 cap partially resolves.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description adds meaning by stating that the `categories`/`styles` arrays OR-match in one call, clarifying the array-vs-single interaction the schema only implies ('merged with categories'). It stops short of explaining enum values, which the schema already enumerates.

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 library blocks'), gives the scope ('up to ~200'), the grouping ('by category'), and the returned fields ('slug, name, tags'). It explicitly contrasts with search_blocks ('A broad menu; search_blocks ranks and filters'), so an agent can distinguish it from its nearest sibling without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative explicitly ('search_blocks ranks and filters') and frames this tool as the broad browsing menu, which tells the agent when to prefer it. It stops short of an explicit when-not clause or listing the other related siblings (get_block, list_block_nodes), so it's clear context rather than a complete routing rule.

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

list_collection_rowsList collection rowsB
Read-only
Inspect

Page through a collection's rows: rows, nextCursor, hasMore, totalCount.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugYesCollection slug.
limitNoDefault 50, max 200.
cursorNonextCursor from the previous page.

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already state readOnlyHint, openWorldHint:false, destructiveHint:false. The description adds pagination semantics (nextCursor, hasMore, totalCount) which tells the agent the operation is cursor-paginated and returns a total count - useful context beyond the 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?

One compact sentence with the core behavior and return shape front-loaded. Could arguably include one clause about scope (per-site/per-collection), but it does not waste words.

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

Completeness3/5

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

Read-only and no output schema, and annotations cover safety. However usage guidance relative to sibling listing tools is absent, and the relationship between collection rows and pagination cursor is only implied. Adequate but with clear gaps.

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 id, slug, limit, and cursor including defaults and max. The description adds nothing param-specific, so baseline 3 is appropriate.

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

Purpose3/5

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

States the verb (page through) and resource (collection's rows), which is more specific than the title. However it does not distinguish itself from list_collections or get_collection, nor does it clarify the relationship to create_collection_rows/list_collections.

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?

No indication of when to use this versus list_collections, get_collection, or the sibling create/update row tools. The reader must infer that this is for paginated retrieval of rows within one collection.

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 site's collections (headless CMS): id, name, slug, row and field counts, public flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the return shape (id, name, slug, row and field counts, public flag) in the absence of an output schema, though it says nothing about pagination or ordering.

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 front-loaded sentence with zero filler; the verb and scope lead and the returned fields follow. Nothing could be trimmed without losing information.

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

Completeness4/5

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

For a simple read-only list tool with one optional param and annotations covering safety, the description supplies the one thing structured data does not: the returned field set. Complete enough to invoke correctly, with only minor gaps (ordering, pagination, zero-collection behavior).

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 one optional parameter ('id': 'Site id.') with 100% schema description coverage, so the schema already carries the meaning. The description confirms the listing is site-scoped but adds no format, default, or multi-site behavior detail beyond 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 (List) and resource (the site's collections) and even enumerates what the listing contains (id, name, slug, row/field counts, public flag). It is easy to distinguish from singular get_collection or row-level list_collection_rows, though the description never names those siblings explicitly.

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 only implied: 'the site's collections' suggests a whole-site enumeration rather than a single-collection fetch or a row listing. There is no explicit when-to-use statement, no mention of get_collection/list_collection_rows as alternatives, and no note that it is an overview call.

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

list_downloadsList downloadsB
Read-onlyIdempotent
Inspect

Site's hosted downloads: link, versions (★ = served), download count, plan allowance.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety and idempotency are covered. The description adds useful output context, notably the '★ = served' legend for interpreting versions, but says nothing about pagination, limits, or empty-result behavior.

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

Conciseness4/5

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

One front-loaded sentence with no filler, compactly conveying scope and returned fields. The '★ = served' legend is terse but functional, slightly hurting readability without wasting space.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so by naming link, versions, download count and plan allowance. Combined with annotations covering the safety profile, this is nearly complete, though pagination and ordering remain unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the single 'id' parameter is already fully documented in the schema. The description implies a site scope but adds no syntax, format, or defaulting detail beyond what the schema provides; baseline 3 is appropriate.

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 identifies a specific resource ('Site's hosted downloads') and enumerates the fields it returns, which cleanly separates it from siblings like list_pages or list_collections. It lacks an explicit verb ('lists') and depends on the title for the action, but the intent is unambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool, what prerequisites exist (e.g., a selected site), or when to prefer it over related tools such as set_download or remove_download. The agent must infer usage entirely from the name.

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

list_pagesList pagesA
Read-only
Inspect

List the site's pages: node id, name, slug, home/404 flags. Use it to get page ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds the return-field inventory, but says nothing about pagination, ordering, or scope limits for a list operation.

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

Conciseness4/5

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

Two short sentences with no filler, and the returned-field list is front-loaded. The second sentence is thin but functional rather than wasteful.

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

Completeness4/5

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

No output schema exists, so the description correctly compensates by naming the returned fields. With one fully documented parameter and annotations covering the safety profile, only the missing sibling differentiation and pagination behavior keep it from being complete.

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

Parameters3/5

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

There is one parameter with 100% schema description coverage ('Site id'), so the schema carries the burden. The description does not mention the site id at all, adding no meaning beyond the structured field; 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 ('List the site's pages') and enumerates the returned fields (node id, name, slug, home/404 flags), which is more than a restated title. It does not, however, distinguish itself from close siblings like list_site_nodes or get_site_node.

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?

'Use it to get page ids' gives a use case but no when-to-use versus the many other list/get node tools in the sibling set. Usage is implied rather than scoped, leaving the agent to guess between list_pages, list_site_nodes, and get_site_node.

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

list_presetsList presetsA
Read-only
Inspect

Curated theme presets (palette + fonts + tokens). compact: true returns id + name only. set_theme({ preset }) applies one.

ParametersJSON Schema
NameRequiredDescriptionDefault
moodNoMood filter, e.g. "warm", "dark", "medical".
briefNoAlias for compact.
compactNoId + name only.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description adds the compact return mode, which is genuine behavioral context, but says nothing about volume of presets, ordering, or auth needs. Adequate but not rich for an annotation-backed read tool.

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

Conciseness4/5

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

Three short telegraphic sentences with no filler, and the 'what it is' clause is front-loaded ahead of the compact detail and the follow-up tool. The fragment style is efficient but slightly cryptic in places.

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

Completeness4/5

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

There is no output schema, but the description signals the two possible return shapes (full preset vs id+name under compact) and points to the tool that consumes the output. For a zero-required-parameter read tool, that covers what an agent needs before calling.

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 three parameters are already documented in detail. The description restates the compact behavior ('compact: true returns id + name only') rather than adding syntax or meaning beyond the schema, and the mood filter and brief alias go unmentioned. 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 the resource precisely — 'Curated theme presets (palette + fonts + tokens)' — and the parenthetical clarifies what a preset actually contains, which distinguishes it from sibling suggest_palettes or list_templates. The listing verb comes from the name rather than the description, so it is clear but not fully self-contained.

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?

'set_theme({ preset }) applies one' gives a useful downstream workflow hint, telling the agent this is the discovery step in a list-then-apply chain. However it never contrasts with adjacent options like suggest_palettes or list_templates, and states no when-to-use condition explicitly.

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

list_site_emailsList site emailsA
Read-only
Inspect

List the site's transactional emails (receipt, welcome, gift card, sign-in link, downloads): customized or default, and whether each sends. Start here.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint=false). The description adds real value beyond them by disclosing what the listing reports per email: whether it is customized or default, and whether it sends. It does not discuss pagination or ordering, but for a read-only list this is solid added context.

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

Conciseness5/5

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

One information-dense sentence plus a two-word routing cue. Nothing is wasted and the resource scope is front-loaded before the behavioral detail.

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

Completeness4/5

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

For a read-only, one-parameter list tool with no output schema, the description tells an agent what comes back and that it is the starting point. Only minor gaps remain, such as how 'whether each sends' is represented and whether results are scoped to the current site.

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 'id' parameter is documented there. The description adds nothing about the parameter, notably that it is optional and presumably defaults to the currently selected site. Baseline 3 is appropriate when the schema carries the semantics.

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

Purpose4/5

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

States a specific verb (List) and resource (the site's transactional emails) and enumerates the categories returned (receipt, welcome, gift card, sign-in link, downloads) plus the customized/default and sends dimensions. It only weakly distinguishes itself from the singular sibling get_site_email via the trailing 'Start here' rather than naming it.

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?

'Start here' implies this is the entry point into the email workflow, presumably before get_site_email or update_site_email. However it never states when-not to use it or explicitly names the follow-up alternatives, leaving the routing to inference.

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

list_site_membersList site membersA
Read-only
Inspect

List a site's members with roles, and pending invites with their ids. Owner-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

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 and destructiveHint=false, so safety is covered; the description adds the meaningful 'Owner-only' authorization requirement on top. It also hints at the returned content (roles, pending invite ids), which partly compensates for the absent output schema, though it omits pagination or result-count behavior.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core 'what' front-loaded and the access constraint last. Every clause earns its place.

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

Completeness4/5

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

For a simple one-param read with no output schema, the description covers scope, returned data shape at a high level, and the owner restriction. Pagination or ordering behavior is unstated, which is a minor gap but not needed to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'id' parameter is documented as 'Site id.', so the schema already carries the semantics. The description only implies site scoping and adds no format or constraint detail beyond the schema, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb (list) and resource (site's members), and distinguishes its scope by adding pending invites, which separates it from sibling reads like list_sites or list_templates. An agent can tell it apart from invite_site_member/revoke_site_invite 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?

The 'Owner-only' clause gives a clear access precondition for when this call will succeed, which is real usage guidance. It doesn't explicitly name alternatives (e.g., invite_site_member to add members), but the read-vs-mutate split is clear from context.

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

list_site_nodesList site nodesA
Read-only
Inspect

Lightweight node tree (id, displayName, type, child count) in DFS order, ~2KB. Use it to find ids and section order.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: the response is a lightweight tree, DFS-ordered, roughly 2KB, and enumerates the returned fields — all of which help the agent judge cost and shape.

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

Conciseness5/5

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

Two tight clauses: the output contract first, the use case second. No filler, no restating the title, and every word earns its place.

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

Completeness4/5

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

With no output schema, the description correctly carries the return-value burden by naming the fields, ordering and size. For a simple one-param read tool it is nearly complete; only the relationship to sibling node tools is unstated.

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 a single parameter (id) with 100% schema description coverage ("Site id."), so the schema fully documents it. The description adds nothing about the parameter, which is the expected baseline when the schema already 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?

States precisely what the tool returns — a lightweight node tree with the exact fields (id, displayName, type, child count) in DFS order and an approximate payload size. That is far more specific than the name alone, though it never explicitly distinguishes itself from get_site_node or search_site_nodes.

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?

"Use it to find ids and section order" gives a real, actionable reason to pick this tool, which is more than implied usage. However it names no alternatives (search_site_nodes, get_site_node) and no when-not condition, so the agent must infer when the other node-listing tools are preferable.

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

list_sitesList sitesB
Read-only
Inspect

List all sites belonging to the authenticated tenant (remote).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered structurally. The description adds useful scope context ('authenticated tenant', '(remote)') but says nothing about result size, ordering, or whether the list is paginated/complete. Adequate but not rich.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the verb and scope come first. The trailing parenthetical '(remote)' is slightly opaque and adds ambiguity rather than information, which keeps this short of a 5.

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 no-argument, read-only listing tool backed by annotations that already cover the safety profile, this is nearly complete. The only gaps are pagination/ordering expectations, which are minor here and there is no output schema to lean on.

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

Parameters4/5

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

The tool takes zero parameters, so the schema baseline is 4 and there is nothing for the description to disambiguate. It correctly avoids inventing parameter claims.

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

Purpose4/5

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

States a specific verb+resource ('List all sites') plus the scoping condition ('belonging to the authenticated tenant'), so an agent knows exactly what collection is returned. It does not explicitly contrast itself with the many other list_* siblings, but the resource noun is unambiguous enough to separate it from list_pages, list_collections, or list_site_members.

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?

The description never says when to reach for this tool versus alternatives such as select_site, get_site_node, or the other list_* calls, nor does it mention any prerequisites. Usage is only implied by the verb, leaving the agent to infer context.

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

list_templatesList templatesC
Read-only
Inspect

List stock templates. Filter by category, tag or q.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFull-text search query.
tagNoFilter by tag (e.g. "modern", "dark").
categoryNoFilter by category (e.g. "landing-page", "portfolio").

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing further – no pagination, result limits, ordering, or empty-result behavior – so it contributes no behavioral context beyond structured fields.

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

Conciseness4/5

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

Two short sentences with the core purpose front-loaded and zero filler. It is efficient, though extremely minimal.

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

Completeness3/5

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

For a read-only list tool with full schema coverage and no output schema, the description is minimally adequate. It omits how results are returned (pagination, ordering) and how templates relate to sibling tools, leaving some gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all three filters (q, tag, category) are already documented in the schema. The description merely restates that these filters exist without adding format, matching, or precedence semantics. 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 ("List stock templates") and signals the resource is a catalog of stock templates, which loosely separates it from pull_template/select_template. It does not explicitly distinguish itself from adjacent list tools like list_presets or list_blocks, so it falls short of a 5.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no routing to alternatives such as select_template or pull_template. Usage is only implied by the word "List."

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

move_nodeMove nodeAInspect

Move a node and its subtree to a new parent. Can't move ROOT or page_home, or into its own subtree.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nodeIdYesNode to move.
positionNoIndex in the new parent (default: end).
newParentIdYesNew parent id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false) but say nothing about preconditions. The description adds real behavioral content by naming the error conditions the agent must avoid (ROOT, page_home, moving into its own subtree), which is non-obvious and not derivable from 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?

Two tight sentences, front-loaded with the action and followed by the constraint. No filler or restated name/title content.

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

Completeness4/5

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

For a 4-parameter mutation tool with no output schema and adequate annotations, the description covers purpose and the key failure modes. What it omits (e.g., whether the move reorders siblings via 'position' or affects a published site) is minor.

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

Parameters3/5

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

Schema description coverage is 100%, so nodeId, newParentId, position, and id are already documented in the schema; the baseline is 3. The description mentions 'new parent' and the subtree, loosely reinforcing two params, but adds no format, default, or ordering detail beyond 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 ('Move') plus resource and scope ('a node and its subtree to a new parent'), which clearly separates it from insert_node, delete_node, and patch_site_node. It does not name an alternative tool, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

The exclusions ('Can't move ROOT or page_home, or into its own subtree') tell the agent when the call will fail, which is useful negative guidance. However, it never states when to use this versus sibling operations like insert_node (creating a new node) or patch_site_node (updating a node in place).

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

patch_site_bulkPatch site bulkA
Destructive
Inspect

Apply many node patches in one atomic write (parallel single patches lose updates). patches is a real JSON array of { nodeId, typePatch?, classNamePatch?, propsPatch?, nodesPatch?, unsetClasses?, unsetProps? }. Same rules as patch_site_node.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nameNoOptional site rename.
patchesYesArray (not a string), applied in order to one fetched document.
buttonValidationNooff | warn | fix (default) | strict, for touched Buttons.
designValidationNooff | warn (default) | strict token checks on touched nodes.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: atomicity of the write, ordered application of patches to a single fetched document, and the concurrency rationale. It stops short of describing failure/rollback behavior or return shape.

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 atomicity guarantee and the concurrency justification before the array-format caution. The inline enumeration of patch fields partially duplicates the schema, but it serves the array-vs-string warning, so little is wasted.

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

Completeness4/5

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

For a destructive bulk mutation with no output schema, the description covers atomicity, ordering, the concurrency motivation, and validation knobs are documented in the schema enums. Missing only return/rollback behavior and the item-count limits, which the schema supplies.

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 real value: the explicit warning that `patches` must be a real JSON array rather than a stringified one, plus the per-item patch field shape and the deferral to patch_site_node's rules for patch semantics.

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 (apply many node patches) with explicit scope (atomic write) and differentiates from the single-patch sibling by naming patch_site_node and noting that parallel single patches lose updates. An agent can distinguish this from patch_site_node without opening either schema.

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

Usage Guidelines4/5

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

Gives a clear reason to prefer this tool over repeated single patches (lost updates under parallelism) and defers patch semantics to patch_site_node. It does not state explicit when-not conditions or limits (e.g. 1000-item cap is only in schema), so it falls short of full routing guidance.

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

patch_site_nodePatch site nodeA
Destructive
Inspect

Patch one node (several: patch_site_bulk, one atomic write). classNamePatch merges Tailwind classes; propsPatch sets other props (objects like dataSource deep-merge, strings and arrays replace); typePatch swaps the component type; unsetProps (runs first) drops a key or branch. Image: write src only; writing content is rejected, and unsetProps ["content"] clears an old one. No children. Rules: get_style_reference({ topic: "editing" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nameNoOptional site rename.
nodeIdYesNode id, e.g. ROOT, page_home.
typePatchNoNew type.resolvedName, e.g. "Text". isCanvas follows.
nodesPatchNoREORDER ONLY: the exact same child ids in a new order. Anything else blanks the canvas.
propsPatchNoNon-class props. Objects merge: { dataSource: { filter } } keeps provider.
unsetPropsNoKeys or dotted paths to delete, e.g. "dataSource.filter".
unsetClassesNoClasses or prefixes to remove; "gap-" also removes md:gap-*.
classNamePatchNoClasses merged via twMerge. Mobile-first: unprefixed = mobile, md:/lg: up.
buttonValidationNooff | warn | fix (default) | strict, for touched Buttons.
designValidationNooff | warn (default) | strict token checks on touched nodes.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give destructive=true, idempotent=false, openWorld=false. The description adds real behavioral context beyond that: single atomic write, unsetProps runs before other patches, propsPatch deep-merges objects while strings/arrays replace, nodesPatch is reorder-only and blanks the canvas otherwise, image nodes reject content writes, and validation-mode defaults.

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 scope and the alternative in the first clause, then uses semicolon-dense fragments to pack merge/unset/image semantics. Every clause carries information, though the compressed telegraphic style slightly hurts readability.

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

Completeness4/5

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

For an 11-parameter destructive mutation with no output schema, the description covers the dangerous cases (reorder blanking canvas, image content rejection, patch ordering) well. Minor gaps remain, e.g. what the write returns and whether the site id/name fields interact with the node patch, but nothing essential is missing.

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?

Schema coverage is 100% (baseline 3), but the description goes well beyond it: twMerge class merging, deep-merge vs replace semantics for propsPatch, ordering of unsetProps, and the image src-only/content-rejection constraint. That is genuine added meaning, not restatement.

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 (patch one node) and immediately distinguishes itself from the batch sibling patch_site_bulk by noting the single-node, atomic-write scope. An agent can tell it apart from add_nodes/insert_node/move_node without opening another schema.

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

Usage Guidelines4/5

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

Explicitly routes multi-node edits to patch_site_bulk and points to get_style_reference({ topic: "editing" }) for rules, which is strong context. It stops short of saying when to prefer patch_site_node over insert_node/move_node for structural changes, so it is clear but not fully exhaustive.

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

preview_site_emailPreview site emailA
Read-only
Inspect

Render the saved email with sample data: subject, errors (an email with errors sends the default instead), warnings, plain text.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
kindYesEmail kind from list_site_emails.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds non-obvious context beyond that: rendering uses sample data, and an email containing errors causes the default email to be sent instead. Those are meaningful behavioral facts not present in the 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?

A single front-loaded sentence carrying the action first and the returned fields after. It is compact with no filler, though the trailing list and parenthetical make it slightly dense for one sentence.

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

Completeness4/5

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

No output schema exists, so the description must convey what a preview returns, and it does list subject, errors, warnings, and plain text. Parameters are covered by the schema, and the safety profile by annotations, so the remaining gaps are minor.

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

Parameters3/5

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

Schema description coverage is 100%, so both 'id' and the enumerated 'kind' are already fully documented by the schema. The description lists rendered outputs (subject, errors, warnings, plain text) rather than clarifying either parameter, so it adds nothing beyond the schema and 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+resource: 'Render the saved email with sample data', which clearly separates it from sibling reads like get_site_email (fetch raw data) and update_site_email (mutate). It does not explicitly name those alternatives though, so the differentiation is implied rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as get_site_email or update_site_email. An agent can infer this is a dry-run preview, but nothing in the text tells it when previewing is the right call versus fetching or editing.

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

publish_sitePublish siteA
DestructiveIdempotent
Inspect

Publish the draft so it goes live. Every write is staged until this runs. static switches static delivery on/off (omit to leave it).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
staticNotrue = static-export renderer, false = React renderer.

TDQS

A3.9/5.0
Behavior3/5

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

The staging model is genuine behavioral context the annotations do not convey, and the omit-to-leave-unchanged note describes state behavior. However, the annotations declare destructiveHint=true and the description never explains what publishing destroys or overwrites (the current live site), nor any auth requirements or failure behavior, which is the most important disclosure for a destructive tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and its effect on the live site, and none is wasted. The parameter note is placed last where an agent needs it.

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

Completeness4/5

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

For a two-parameter publish toggle with no output schema, the description covers purpose, staging semantics, and the optional flag's default behavior. The main remaining gap is the destructive consequence of publishing, which matters given destructiveHint=true.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds semantics the schema lacks: that omitting `static` leaves the current setting unchanged, and that the flag toggles static delivery on/off. It does not describe `id`, though the schema already covers it adequately.

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

Purpose4/5

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

The description gives a specific verb and resource ('Publish the draft so it goes live') and distinguishes this tool from the many write siblings by explaining that 'every write is staged until this runs', which tells the agent that update_site/patch_site_bulk do not go live on their own. It never names the counterpart unpublish_site, so the sibling mapping is implied rather than explicit.

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?

'Every write is staged until this runs' is real usage guidance: it tells the agent this is the step required to make prior edits visible, and that omitting it leaves the site in draft. There is no explicit when-not-to-use clause (e.g. previewing) or reference to unpublish_site, so it stops short of full routing guidance.

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

pull_templatePull templateB
Read-only
Inspect

Download a stock template's decoded node tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesTemplate slug to pull

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the payload is a decoded node tree (useful given no output schema), but says nothing about size, pagination, or whether the template must be selected/installed first.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler. It is efficient, though it is arguably under-specified rather than truly concise.

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

Completeness3/5

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

For a one-parameter read tool with no output schema, naming the return payload (decoded node tree) partially compensates. Still missing is any hint about the relationship to select_template/list_templates and whether a site context is required, which matters given the crowded sibling set.

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 slug parameter is already documented as 'Template slug to pull' with a maxLength constraint. The description's mention of a template slug adds nothing beyond the schema, 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 (Download) and resource (a stock template's decoded node tree), which is more informative than a restatement of the name. It does not, however, differentiate itself from nearby siblings like select_template, list_templates, or get_block, leaving the agent to guess which template-access tool fits.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus list_templates or select_template, no prerequisites, and no exclusions. The agent must infer usage entirely from the name and the sibling list.

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

refresh_productsStripe: refresh productsA
DestructiveIdempotent
Inspect

Sync the site's Stripe catalog into its products collection (creates it). Run after products change in Stripe. Returns the product count.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNoSite id.

TDQS

A4/5.0
Behavior3/5

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

The description adds two useful facts beyond the annotations: the target collection is created if absent, and the call returns a product count. However, the annotations declare destructiveHint=true, and the description never warns that the existing `products` collection contents are overwritten by the sync — the highest-risk behavior for an agent to know. No contradiction, but a notable disclosure gap.

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

Conciseness5/5

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

Three short sentences, zero filler, with the core action front-loaded. The trigger condition and return value are appended in decreasing order of importance.

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

Completeness4/5

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

With no output schema, the description helpfully states the return value, and it covers what the tool does, when to run it, and its collection-creating side effect. The one gap is overwrite semantics on the target collection, which the destructive annotation flags but the description does not explain.

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

Parameters3/5

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

Schema description coverage is 100% with a single, self-explanatory `siteId` parameter, so the schema carries the parameter burden. The description adds no format, default, or scoping detail for siteId, making this baseline 3.

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 ('Sync the site's Stripe catalog'), names the destination collection, and notes the side effect (creating it) and the return value. This separates it cleanly from read-only Stripe siblings like stripe_get_product, stripe_search_products, and stripe_list_categories.

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?

'Run after products change in Stripe' gives an explicit trigger condition, which is real usage guidance. It stops short of naming alternatives or exclusions (e.g. what to use instead if you only want to read the catalog), so it is clear context without full routing.

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

remove_downloadRemove downloadA
DestructiveIdempotent
Inspect

Remove a download (link then 404s) or one non-current version; unused files are deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
versionIdNoOnly this version.
downloadIdYesDownload id.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral detail beyond annotations: the link 404s after removal, non-current versions can be targeted individually, and unused files are deleted. This tells the agent what actually happens.

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 sentence with three well-packed clauses. The primary destructive effect (link then 404s) is front-loaded, followed by the version variant and cleanup behavior. No waste.

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 3-param destructive mutation with full annotation coverage and no output schema, this covers what the agent needs: the resource, the two removal modes, and the side effects. It could mention that the downloadId is required or whether versionId can be combined, but the schema handles that.

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 three parameters (id, versionId, downloadId) already have documented meanings. The description's phrase 'one non-current version' adds interpretive context for when versionId applies, but the schema already describes it. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (Remove) and resource (download), and immediately disambiguates the two modes: removing a download (causing link 404) versus removing one non-current version. The parenthetical 'link then 404s' distinguishes this clearly from siblings like delete_page or delete_node.

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 implies usage through the two mode descriptions (remove download vs remove one non-current version), which suggests when each parameter applies, but it doesn't explicitly state when to use this tool versus set_download or list_downloads. No alternative is named.

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

remove_portalRemove portalB
DestructiveIdempotent
Inspect

Remove/disable the portal on a site (sets portal to null).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds one useful behavioral detail — that the operation nulls the portal — but says nothing about irreversibility of the portal config or required permissions. It does not contradict the annotations.

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 front-loaded sentence naming the action, target, and resulting state with zero waste. Nothing extraneous.

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

Completeness4/5

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

For a simple destructive single-parameter tool, the description plus annotations give the agent enough to call it correctly (what it does, that it is destructive and idempotent). Only a note on whether the removed portal can be restored would improve it further.

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

Parameters3/5

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

With a single parameter ('id', Site id) at 100% schema description coverage, the schema fully documents the input. The description adds no parameter meaning beyond the schema, 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 (remove/disable) and resource (portal on a site), and clarifies the end state '(sets portal to null)'. The sibling set contains get_portal and set_portal, so the verb distinguishes it, but the description never explicitly names those alternatives.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as calling set_portal with a null value or checking get_portal first. Usage is only implied by the verb.

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

revoke_site_inviteRevoke site inviteA
DestructiveIdempotent
Inspect

Revoke a pending invite by id (from list_site_members). Owner-only; existing members stay.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
inviteIdYesInvite id.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety behavior is covered. The description adds non-obvious context: only *pending* invites are affected and existing members are untouched, which clarifies blast radius, plus the owner-only authorization requirement.

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 that front-loads the action and resource, then appends prerequisite and scope. No filler.

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

Completeness4/5

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

For a mutation tool whose annotations carry destructive/idempotent semantics, the description covers authorization, scope, and input provenance, so an agent has what it needs. The lingering id vs inviteId ambiguity is the only minor gap.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (id and inviteId) are already documented. The description's 'by id' phrasing slightly muddies which identifier applies since the schema has two id-like params, adding little beyond the schema baseline.

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

Purpose5/5

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

States a specific verb (revoke) and resource (pending site invite), plus the scope of what is affected ('existing members stay'). It is clearly distinguishable from invite_site_member and other site 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?

Names the prerequisite (Owner-only) and points to where the id comes from (list_site_members), which tells the agent how to obtain input. It does not, however, contrast against alternatives such as removing a member rather than revoking an invite.

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

screenshot_siteScreenshot siteA
Read-only
Inspect

Screenshot the DRAFT in a real browser — the only way to see compiled CSS, theme, state-driven UI and responsive layout. Shoot sections with selector (full size, not scaled down), at the design width and at 390.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
pathNoPage slug (omit for home).
widthNo320–1920 (default 1440).
heightNo480–2400 (default 900).
fullPageNoWhole page; ignored with selector.
selectorNoCSS selector, e.g. "#check".

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description usefully adds that capture happens against the DRAFT in a real browser and that `selector` produces an unscaled full-size render, but it never says what the tool returns (image payload, URL, artifact id) or flags the latency/async nature of real-browser captures.

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 tight sentences, front-loaded with the action and scope, then the rendering caveat and selector/width advice. Dense but never padded; minor friction from shorthand like '390' without units and a heavy em-dash list.

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

Completeness3/5

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

All six parameters are documented in the schema and the read-only safety profile is covered by annotations, so nothing essential is missing for invocation. However, with no output schema the description should say what a screenshot call yields (and whether it is synchronous or polled), which it omits.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: `selector` yields full-size (not scaled down) section captures, and it recommends concrete widths ('design width and 390') that the numeric `width` parameter alone does not convey as intent.

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 (screenshot) and resource (the DRAFT site) rendered 'in a real browser', and clarifies what that actually captures: compiled CSS, theme, state-driven UI, responsive layout. No sibling tool performs rendering/capture, so an agent can distinguish it immediately.

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?

Frames the tool as 'the only way to see compiled CSS, theme, state-driven UI and responsive layout', which tells the agent when this is the right call, and advises targeting sections with `selector` and shooting at design width and 390. It stops short of naming exclusions (e.g. published vs draft, or what to use for non-visual verification).

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

search_blocksSearch blocksA
Read-only
Inspect

Search the block library; returns one page of slugs with descriptions and tags (full structure: get_block), plus sections on this site that can be cloned. q takes short layout phrases ("split hero"), categories / styles arrays OR-filter, page pages through. Guide: get_style_reference({ topic: "blocks" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoShort layout phrase, e.g. "photo hero"; sorts by relevance.
tagNoe.g. "pricing".
pageNoDefault 1.
sortNopopular | newest | name | relevance. Default: relevance with q, else newest.
groupNoLogical group, e.g. "acme-homepage-cards".
limitNoDefault 50, max 100.
styleNoOne vibe; auto-set from the site's buildStyle.
presetNoStarter/bundle id, e.g. "acme".
sourceNoLegacy field; prefer preset.
stylesNoOR-filter by several vibes.
categoryNoOne category (merged with categories).
featuredNoCurated only.
blockTypeNosection (default) = page sections; component = patterns inside sections.
categoriesNoOR-filter by several categories.
subcategoryNoe.g. "testimonials".

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive/closed-world, so the safety bar is covered. The description adds real behavioral context beyond them: it returns a single paginated page of slugs with descriptions and tags, and also surfaces site sections that can be cloned, which an agent could not infer from the annotations 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?

Front-loaded with the core action and return shape, then a compact clause per key filter. It is dense but appropriate for a 15-parameter tool, with only mild redundancy in re-listing the OR-filter and paging behavior already in the schema.

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

Completeness4/5

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

For a 15-param read-only search with no output schema, the description covers result shape, paging, the two array filters, and a documentation pointer, which is enough to invoke correctly. Remaining gaps (sort/limit defaults, source vs preset) are minor and partly covered by 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 every parameter is already documented in the schema (q's phrase form, page default, OR-filter semantics for categories/styles are all present there). The description's parameter notes largely restate schema content, adding little new syntax or edge-case meaning, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Search the block library') and immediately discloses the return shape (one page of slugs with descriptions and tags). It explicitly routes to get_block for full structure, letting an agent distinguish this shallow search from the deeper fetch without opening either schema.

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

Usage Guidelines3/5

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

Names get_block as the path for full block structure and points to a get_style_reference guide, which gives some alternative awareness. However it never clarifies when to use this versus list_blocks or search_site_nodes, and offers no exclusions or prerequisites, leaving the sibling-choice mostly to inference.

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

search_site_nodesSearch site nodesB
Read-only
Inspect

Find nodes by text/displayName/id (q), component type, or className substring/regex. className filters return the full className — use them for site-wide class audits.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoMatches displayName, text and id (case-insensitive).
idNoSite id.
typeNoComponent type, e.g. Text, Button, Container.
classNameNoSubstring of props.className.
classRegexNoRegex over props.className, e.g. 'py-(8|12)'.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one behavioral note (className filters return the full className), but says nothing about pagination, result limits, or ordering for what is a search tool.

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

Conciseness4/5

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

Two sentences, front-loaded with the filterable dimensions and zero filler. It is efficient and well-structured, though the second sentence's payoff is narrow relative to its prominence.

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

Completeness3/5

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

For a 5-parameter read-only search tool with no output schema, the definition covers what can be filtered but omits result-size/pagination expectations that matter for a search. Combined with 100% schema coverage and annotations covering safety, it is adequate but leaves a gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each of the five parameters. The description mostly restates the schema filters (grouping q, type, className/classRegex) and only marginally adds meaning with the full-className return note, 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 (Find) and resource (nodes) and enumerates the filterable fields (text/displayName/id, type, className). It is clear what the tool does, but it never distinguishes itself from overlapping siblings like list_site_nodes, get_site_node, or search_blocks, leaving the agent to infer the boundary.

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

Usage Guidelines3/5

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

Provides one concrete usage scenario ('use them for site-wide class audits'), which is genuinely helpful. However, it gives no when-not-to-use guidance and no explicit routing versus list_site_nodes/get_site_node, so the choice between siblings is left to inference.

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

select_siteSelect siteA
Read-only
Inspect

Set the active site for this session and clear any active template. The hosted server doesn't keep it between calls — still pass id on every call.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSite id.

TDQS

A3.9/5.0
Behavior4/5

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

Discloses non-obvious behavior the annotations don't carry: selection is session-scoped, the hosted server forgets it between calls, and the active template is cleared. There is mild tension with readOnlyHint=true since clearing a template is a state change, though it affects session state rather than stored data.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the core action stated first and the persistence caveat immediately after. Every clause carries information an agent needs.

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

Completeness4/5

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

For a single-parameter session tool with no output schema and a read-only annotation profile, the description covers the essential contract. Minor omissions remain: format of a valid site id and what happens if the id is unknown.

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 `id`, but the description adds the meaningful nuance that `id` must be supplied on every call despite the session concept. That is real semantic value beyond the one-line schema description.

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?

Names a concrete verb and resource ("Set the active site for this session") and adds a scope fact — it clears any active template — that separates it from select_template behaviorally. It never names a sibling explicitly, so differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

Gives a real usage instruction ("still pass `id` on every call") because state isn't persisted, which is genuinely actionable. However, it never says when to reach for this tool versus peers like select_template or list_sites, so the when-to-use guidance is only implied.

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

select_templateSelect templateA
Read-only
Inspect

Make a template the edit target for this session; editing tools then act on it (clears the active site). Admin or tenant owner/editor only.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesTemplate slug to set as active

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true / destructiveHint=false, so the description adds real value by disclosing the session-level side effect ('clears the active site') and the authorization requirement ('Admin or tenant owner/editor only'). This is exactly the kind of context the annotations do not carry.

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

Conciseness4/5

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

One sentence, front-loaded with the core action and zero filler. The three distinct facts (action, side effect, permissions) are packed into one sentence with a parenthetical, which is slightly dense but still readable.

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

Completeness4/5

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

For a single-parameter selection tool with no output schema, the description covers the action, its downstream effect, the session state it replaces, and the permission gate. Only the relationship to select_site is left implicit, which keeps it short of fully complete.

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

Parameters3/5

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

Schema coverage is 100% and the single 'slug' parameter is already documented as 'Template slug to set as active'. The description adds no format, constraint, or sourcing detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Make a template the edit target for this session') and immediately explains the consequence for downstream tools. An agent can distinguish this from select_site, list_templates, and pull_template without opening any schema.

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

Usage Guidelines3/5

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

'editing tools then act on it' implies the workflow context in which this tool matters, and the permission clause narrows who can call it. However, it never states when to choose this over the closely related select_site, and no explicit exclusions or alternatives are named.

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

set_checkoutSet checkoutA
DestructiveIdempotent
Inspect

Make a collection sellable through Stripe (remove: true stops): Cart Buttons in a Data repeater bound to it charge each row's price (minor units) or its Stripe price id (priceIdField). Needs stripe_connect. Details: get_style_reference({ topic: "integrations" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
removeNoStop selling; rows stay.
siteIdNoSite id.
priceFieldNoRow field with the display price.
priceIdFieldNoRow field holding a Stripe price id. Omit to charge `price`.
variantsFieldNoRow field with a variants array (each with its own priceId).
collectionSlugYesCollection to sell.
inventoryFieldNoRow field with stock count.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so safety is partly covered. The description adds genuine behavioral context beyond that: the Stripe prerequisite and, critically, the downstream effect that bound Cart Buttons charge each row's `price` in minor units or its Stripe price id. It stops short of describing auth scopes or error behavior.

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

Conciseness4/5

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

Dense but front-loaded – the core action leads, then the remove inverse, then the mechanics, then the pointer. Slightly cramped in the middle clause ('Cart Buttons in a Data repeater bound to it charge...'), which needs domain familiarity, but no sentence is wasted.

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

Completeness4/5

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

For a 7-parameter, 1-required mutation tool with no output schema, the description supplies the prerequisite, the inverse operation, the charging model, and a docs pointer, while the schema carries the per-field detail. Adequate; only auth/permission scope and failure modes are unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining the interaction the schema only hints at: how price vs priceIdField determine what gets charged and that price is in minor units. That relationship-level meaning is beyond the per-field 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 outcome verb+resource: 'Make a collection sellable through Stripe', with the inverse toggle (remove: true) called out inline. An agent can distinguish this from siblings like set_download, set_portal, or stripe_connect without opening any schema.

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

Usage Guidelines4/5

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

Gives a hard prerequisite ('Needs stripe_connect') and routes to get_style_reference for details, which is real usage context. It does not, however, state when NOT to use it or contrast it explicitly against the other set_*/stripe_* tools.

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

set_domainSet domainA
DestructiveIdempotent
Inspect

Attach a custom domain (apex + www pair, or one subdomain) and return the DNS records to create, specific to this project. Doesn't publish; clear_domain detaches. 409 = a variant is on another Vercel project; 403 upgrade = plan domain limit. Details: get_style_reference({ topic: "domains" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
domainYesApex or www form; both variants are registered. Detach with clear_domain.
redirectModeNoto-apex (default, www → apex 308) | to-www | none.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructive/idempotent/openWorld, so the description correctly focuses on adding context: it registers both apex+www variants, returns DNS records rather than publishing, and decodes 409 (collision on another project) and 403 (plan limit). No contradiction with the annotation profile.

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 action and return value, then stacks routing, error, and reference clauses. Dense and telegraphic ('409 = ...; 403 upgrade = ...') but every clause carries information; not padded.

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

Completeness4/5

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

No output schema exists, and the description compensates by stating the tool returns DNS records to create. With annotations covering the safety profile and error codes covering failure modes, an agent has enough to call this correctly; only the redirect-mode sibling relationship is unaddressed.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description's mention of the apex+www pair and the one-subdomain case largely restates the schema's own note that 'both variants are registered,' and redirectMode is left entirely to the enum description.

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 (Attach) and resource (custom domain) plus what comes back (the DNS records to create, specific to this project). It explicitly distinguishes itself from clear_domain (detach) and the check/get status siblings, so an agent can route 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?

Names the detach alternative (clear_domain) and rules out a mistaken expectation with 'Doesn't publish.' The 409/403 error semantics tell the agent when the call will fail and why. It stops short of positioning against check_domain, get_domain_status, or set_domain_redirect_mode, which is the only real gap.

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

set_domain_redirect_modeSet domain redirect modeB
DestructiveIdempotent
Inspect

Switch the apex/www redirect pairing on an attached domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
redirectModeYesNew pairing.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered externally. The description adds only the scope of the change ('apex/www redirect pairing') and does not disclose what happens to existing redirects or whether the change is live immediately.

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

Conciseness4/5

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

A single tight sentence with the target of the mutation front-loaded; nothing is wasted. It is perhaps overly terse, but there is no filler.

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

Completeness3/5

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

For a destructive, idempotent mutation, the annotations and complete schema cover the essentials, so the description need not explain return values (no output schema). It is nonetheless thin on the effect of the change on existing redirects, which is the main thing an agent would want to warn about.

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 redirectMode enum is fully documented, so the schema does the heavy lifting (baseline 3). The description mildly reinforces the meaning of the enum by framing it as the apex/www pairing but adds no syntax or semantics beyond that.

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 ('switch') and resource ('apex/www redirect pairing on an attached domain'), which is materially more precise than the bare title. It is still distinguishable from siblings like set_redirects or set_domain by naming the pairing concept, though it never explicitly contrasts with them.

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

Usage Guidelines3/5

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

Implies the precondition that the domain must already be attached, which is useful. However, it gives no explicit when-to-use guidance and no routing against adjacent tools (set_domain, set_redirects, clear_domain), leaving the agent to infer selection.

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

set_downloadSet downloadAInspect

Host a file behind a stable link (/api/downloads/); link to it from a Button. New: name + file. New version: downloadId + file (same link). Roll back: downloadId + currentVersionId. File = filePath (stdio) or mediaId of a private upload. Pro+; .exe/.dmg etc need Agency.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nameNoDisplay name; required when creating.
labelNoe.g. v1.2
notesNoChangelog.
mediaIdNoFrom upload_file({ private: true }).
filenameNoSaved-as name; required with mediaId.
downloadIdNoExisting download; omit to create.
currentVersionIdNoServe this existing version.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false), so the description's value is in the constraints it adds: Pro+ plan gating, an extra Agency requirement for .exe/.dmg, and the key behavioral fact that a new version reuses the same stable link rather than breaking it. It does not cover failure behavior on invalid parameter combinations, which keeps it short of a 5.

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

Conciseness4/5

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

The most important fact (a stable hosted link) is front-loaded, and almost every clause carries distinct information with no filler. It is dense to the point of being telegraphic ('Pro+; .exe/.dmg etc need Agency'), which slightly hurts first-pass readability but not efficiency.

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

Completeness4/5

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

For an 8-parameter, all-optional mutation tool with no output schema, the description supplies the mode logic, plan constraints, and the link shape an agent needs to act correctly. The remaining gap is error/edge-case behavior and any note on what the call returns on success.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by encoding the conditional requiredness of parameters (name required only when creating, filename tied to mediaId, downloadId omitted to create). Since the schema marks zero required parameters, this mode-based mapping is genuinely additive information.

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

Purpose5/5

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

The first clause gives a concrete verb and outcome — hosting a file behind a stable link at <site>/api/downloads/<id> — plus the intended consumer (a Button). It also enumerates the three operating modes (create, new version, roll back), which separates it from siblings like upload_file, list_downloads, and remove_download.

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

Usage Guidelines4/5

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

It gives explicit parameter combinations per mode: name+file for new, downloadId+file for a new version, downloadId+currentVersionId for rollback. That is strong when-to-use guidance, but it never states when NOT to use it or names an alternative tool (e.g., use upload_file first to obtain mediaId) — that link is only implied.

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

set_faviconSet faviconA
Destructive
Inspect

Set or clear the site favicon. Exactly one source: mediaId, imageUrl, svgContent (user-supplied SVG), dataBase64 (small icons, ~3MB cap), or clear: true. Best: a 512px square PNG or an SVG. Staged — publish to see it live. More: get_style_reference({ topic: "media" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
clearNoRemove the favicon; other fields ignored.
mediaIdNoExisting media id (no upload).
filenameNoFilename hint.
imageUrlNoPublic URL to upload.
mimeTypeNoFor dataBase64 (default image/png).
dataBase64NoBase64 or data URL. Small icons only (~3MB cap).
svgContentNoRaw SVG the user supplied (starts with <svg or <?xml). Never fabricate.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the destructive, non-idempotent write profile, so the bar is lower. The description still adds genuinely new context: 'Staged — publish to see it live' discloses a preview/publish workflow not captured by any annotation, and the clear path plus size cap clarify side effects.

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

Conciseness5/5

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

Front-loaded with the core action, then the source union, format advice, staging note, and reference — every clause earns its place with no redundancy. Multiple short fragments keep it scannable.

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

Completeness4/5

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

Covers the source union, format best-practice, and the staged/publish behavior for an 8-param tool with no output schema and full annotation coverage. The only minor gap is not stating that a new favicon replaces the existing one, though destructiveHint implies 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 coverage is 100% so the baseline is 3, but the description adds meaning beyond the schema by declaring that exactly ONE source must be supplied among mediaId/imageUrl/svgContent/dataBase64/clear, a mutual-exclusion rule absent from the schema. It also flags dataBase64 as small-icon-only.

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

Purpose5/5

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

States a specific verb+resource ('Set or clear the site favicon') and, notably, names the two opposite operations it supports. No sibling tool competes for this purpose, so an agent can immediately tell this is the favicon-mutation tool.

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?

Provides operational constraints ('Exactly one source') and a recommended format ('512px square PNG or an SVG'), plus a pointer to get_style_reference for more. It does not explicitly contrast against nearby tools like upload_image, but the usage constraints are clear and actionable.

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

set_integrationsSet integrationsA
DestructiveIdempotent
Inspect

Set analytics and verification ids, rendered as real tags on published pages: GA4, GTM, Search Console, Meta Pixel, Google Ads. Other third-party scripts go in ROOT inject.head/footer via patch_site_node. Per-action conversions: get_style_reference({ topic: "integrations" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
googleAdsNoAW-XXXXXXXXXX. Needed for per-action google-ads conversions.
metaPixelNoMeta Pixel id.
googleAnalyticsNoGA4 id, G-XXXXXXXXXX.
googleTagManagerNoGTM-XXXXXXX.
googleSearchConsoleNoVerification content value only, not the meta tag.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the agent knows this mutates state. The description adds useful context that ids are 'rendered as real tags on published pages', but never clarifies the destructive side the annotation flags — e.g., whether omitting a field clears an existing id or leaves it untouched.

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 action and scope, then the exclusions and the pointer to further docs. No filler, though the get_style_reference call syntax is slightly cryptic without explanation.

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

Completeness3/5

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

For a destructive, idempotent mutation with six all-optional parameters and no output schema, the description omits the most decision-relevant behavior: what happens to existing integrations when fields are omitted. The tag-rendering note and sibling routing partially compensate.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already supplies format examples (G-XXXXXXXXXX, AW-XXXXXXXXXX, GTM-XXXXXXX) plus the note that Search Console takes the verification content value only. The description adds no per-parameter meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Set analytics and verification ids') and enumerates exactly which integrations are covered: GA4, GTM, Search Console, Meta Pixel, Google Ads. It also distinguishes itself from the sibling patch_site_node, which handles other third-party scripts.

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 routes adjacent use cases: non-listed third-party scripts go through patch_site_node, and per-action conversion setup is delegated to get_style_reference({ topic: 'integrations' }). It does not state prerequisites (e.g., that tags only materialize on published pages is implied but not framed as a condition of use).

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

set_portalSet portalB
DestructiveIdempotent
Inspect

Enable a portal UI around the published site (sales banner, client review, demo).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
typeYes"sales", "review", "demo", ….
configNoExtra portal config, merged in.
statusNoe.g. "unclaimed" (default), "claimed".

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=true, and readOnlyHint=false, so the safety profile is supplied. The description adds that the portal wraps the 'published site', hinting at a prerequisite, but says nothing about overwriting existing portal config or how 'merged in' config interacts with destructive behavior.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the key concept ('Enable a portal UI') leads. It is efficient, though arguably too thin to be called exemplary for a destructive mutation tool.

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

Completeness3/5

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

For a 4-param destructive mutation with no output schema, the description is adequate given full schema coverage and annotations, but it omits what happens to existing portal settings, the meaning of 'status' transitions, and any publish prerequisite. It leaves several mutation-semantics gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (id, type, config, status) are already documented inline, including type examples and the config merge note. The description adds no syntax, format, or default details beyond the schema, 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: sets/enables a portal UI 'around the published site', with concrete examples (sales banner, client review, demo) that clarify what a portal is. However, it does not distinguish itself from its obvious siblings get_portal and remove_portal beyond the shared name root.

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 type examples ('sales', 'review', 'demo') imply the intended scenarios, giving implied usage. But there is no explicit when-to-use guidance, no exclusion of when NOT to set a portal, and no routing to get_portal/remove_portal.

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

set_redirectsSet redirectsA
DestructiveIdempotent
Inspect

Replace the site's 301/302 redirect rules, evaluated server-side before render. Paths are site-relative; destinations may be absolute URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
redirectsYes[{ from, to, permanent? }]. Pass the full list.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is largely covered. The description still adds real behavioral context beyond that: server-side evaluation order relative to render, and that 'from' is resolved site-relative while 'to' may be absolute.

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

Conciseness5/5

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

Two tightly packed sentences with no waste. The destructive replace semantics are front-loaded, followed by input-format constraints, which is exactly the order 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 two-parameter tool with full schema coverage, a complete annotation set, and no output schema, the description covers purpose, mutation semantics, and input format adequately. The one omission an agent might wish spelled out is that any existing rule not included in the submitted list is silently removed, though 'Replace' strongly implies it.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents id, from, to, and permanent (including the 301/302 default). The description's path-resolution note largely restates what the schema's own 'Site-relative path' and 'Path or URL' descriptions already convey, so it adds marginal value.

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 ('Replace the site's 301/302 redirect rules') and pins down the operational scope ('evaluated server-side before render'). It does not, however, distinguish itself from the sibling set_domain_redirect_mode, which an agent could easily confuse with this tool.

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

Usage Guidelines3/5

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

Usage is implied by 'Replace' and the schema note 'Pass the full list', signalling this is a full-set overwrite rather than an append. But there is no explicit when-to-use guidance, no mention of prerequisites, and no routing away from the similar set_domain_redirect_mode sibling.

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

set_site_chatSet site chatA
DestructiveIdempotent
Inspect

Change the site's chat bot settings; only the fields you pass change. The bot answers from the published pages and public collections and saves leads to Form Submissions as "Chat". Visitors see it only where the page has an AgentFloatingBubble (site-wide) or AgentChat node, and only while the owner has AI credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
enabledNoTurn chat on or off.
greetingNoFirst message visitors see.
leadFieldsNoDetails to collect before saving a lead. Must include email or phone.
notifyEmailNoExtra address emailed for each lead. Empty stops.
instructionsNoOwner guidance: tone, what to push, what to avoid. Empty clears.
assistantNameNoName shown in the chat header.
leadCollectionSlugNoAlso save each lead as a row in this collection. Empty stops.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description adds genuine behavioral context: partial-patch semantics, that the bot answers only from published pages and public collections, that leads land in Form Submissions as 'Chat', and that visibility depends on an AgentFloatingBubble/AgentChat node plus available AI credits. It stops short of explaining auth requirements or what happens when credits run out mid-session.

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

Conciseness4/5

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

Two sentences, purpose front-loaded before the visibility/credit caveats. The second sentence is dense but each clause (data sources, lead destination, render conditions, credit gate) carries distinct information rather than padding.

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

Completeness4/5

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

With no output schema and annotations covering the safety profile, the description does most of the needed work: it explains side effects, render preconditions, and the patch model. Remaining gaps are the return shape and permission requirements, which are minor for an idempotent settings updater.

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 a parameter-level fact the schema does not encode: that this is a merge/patch operation where omitted fields are left untouched. That distinction between omitting a field and passing an empty value is exactly the kind of semantic the schema only partially implies.

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 the site's chat bot settings') and immediately pins down the mutation model with 'only the fields you pass change'. An agent can distinguish this from the read-side sibling get_site_chat without opening either schema.

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

Usage Guidelines3/5

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

The description implies usage context (chat settings for a site, gated on published pages/collections and owner AI credits) but never says when to reach for this tool versus get_site_chat, nor states prerequisites as instructions. It is usable guidance by inference rather than explicit routing.

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

set_themeSet themeA
DestructiveIdempotent
Inspect

Write the site theme — preset, palette, darkPalette, styleGuide tokens, fonts, JSON-LD, site animations — into the draft, effective immediately. suggest_palettes / suggest_font_pairings only show options. ROOT company vars: patch_site_node. Palette names, styleGuide keys, workflow: get_style_reference({ topic: "theme" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
demoNoDemo URL.
fontsNoHint ({ url } or { families }) parsed into heading/body families when styleGuide omits them.
titleNoTitle.
hiddenNoHide from the public gallery.
jsonLdNoSchema.org JSON-LD object; {{company.*}} variables work inside it.
presetNoPreset slug; loads palette, fonts and styleGuide. Explicit params override it.
paletteNoComplete palette — replaces the existing one. [{ name, color }] with DaisyUI names (Primary, Primary Content, Secondary, Accent, Neutral, Base 100/200/300, Base Content, …), never "Background"/"Foreground". Colors: hex, rgb, hsl or oklch().
homePageNoHome page flag (default true).
animationsNoUpserted by key into theme.animations; nodes then use root.animation "site:<key>". Only for motion no built-in preset covers. Rules + examples: get_style_reference({ topic: "animation" }).
buildStyleNoVibe override for block filtering. Rarely needed — preset sets it.
styleGuideNoDesign tokens, merged into the existing styleGuide; each key becomes a CSS var (headingFontFamily, bodyFontFamily, radiusBox, buttonPadding, contentWidth, input*Color, …). Key list: get_style_reference({ topic: "theme" }).
darkPaletteNoOptional dark-mode palette with the same names. Enables dark mode.
descriptionNoShort description (≤75 chars).
removeAnimationsNoKeys to delete from theme.animations.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, so the mutation/idempotency profile is covered. The description adds genuine context beyond them: changes land in the draft but take effect immediately, and (via schema-adjacent wording) palette replaces while animations upsert by key. Auth/permission requirements are not mentioned, but nothing contradicts the annotations.

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

Conciseness5/5

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

Front-loads the write action and scope in the first clause, then spends the remaining short sentences entirely on routing and reference pointers. No filler; each clause points at a decision the agent has to make.

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 15-parameter, nested, no-output-schema mutation tool, the description covers the risky areas: draft scoping, palette replacement, animation upserting, and where to find valid names/keys. It could say more about how partial updates interact (immediate effect on an unpublished draft vs published site), but nothing essential to calling it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: valid palette names and styleGuide keys come from get_style_reference({ topic: "theme" }), ROOT company variables must go through patch_site_node, and animations are keyed/upserted. These pointers reduce misuse of the 15-parameter surface.

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 ("Write the site theme") and enumerates exactly what it covers — preset, palette, darkPalette, styleGuide tokens, fonts, JSON-LD, animations — into the draft. It explicitly distinguishes itself from suggest_palettes / suggest_font_pairings, so an agent can separate it from siblings without opening either schema.

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

Usage Guidelines4/5

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

Names the adjacent tools and the boundary: suggest_* only show options, ROOT `company` vars belong to patch_site_node, and lookups go to get_style_reference({ topic: "theme" }). It gives clear routing context but does not state outright when this tool should be avoided (e.g. per-node styling instead of site-wide).

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

stripe_connectStripe: connectAInspect

Connect Stripe so the site can take payments. Returns the connection status and, while unfinished, a single-use onboarding URL that only the site owner can complete; the status reads 'ready' once they have, and that call fills the products collection from Stripe. Owner-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNoSite id.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare the generic profile (not read-only, not idempotent, open world); the description adds substantial context beyond them: the return value (status plus a single-use onboarding URL), that only the site owner can complete onboarding, and the notable side effect that completion back-fills the `products` collection. That is exactly the behavioral detail 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.

Conciseness4/5

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

Front-loaded with the purpose, then the return/behavior detail; every clause carries information. The single semicolon-chained sentence is dense and slightly run-on, costing a point on structure but not on substance.

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

Completeness4/5

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

With no output schema, the description usefully explains what comes back (status, onboarding URL) and the downstream effect on `products`, which is more than most definitions do. Minor gaps remain around repeat invocation behavior (not idempotent) and failure modes, but the core flow is complete.

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

Parameters3/5

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

Schema coverage is 100% with a single documented parameter ('Site id.'), so the schema already carries parameter meaning. The description adds nothing about the siteId itself; baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Connect Stripe so the site can take payments') and is clearly separable from the sibling stripe_* tools (stripe_get_product, stripe_search_products), which are read operations on an already-connected account. An agent can distinguish this 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 triggering context (connect Stripe to enable payments) and a hard constraint ('Owner-only'), plus the completion condition ('status reads ready'). It does not name alternative tools or state when not to call it (e.g., when already connected), so it falls short of explicit routing.

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

stripe_get_productStripe: get productA
Read-only
Inspect

One Stripe product by id or metadata.slug: title, description, price(s), images, metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoStripe product id (prod_…); wins over slug.
slugNometadata.slug.
siteIdNoSite id.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds value by enumerating the returned shape (title, description, price(s), images, metadata), which matters because there is no output schema.

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

Conciseness4/5

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

A single compact line that front-loads the resource and lookup key before the returned fields. No filler, though the telegraphic fragment style is terse enough to be slightly cryptic.

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

Completeness4/5

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

For a read-only lookup with no output schema, the description compensates by listing the fields the product returns, and all three parameters are documented in the schema. It omits not-found/error behavior and the fact that id and slug are both optional, but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents id, slug and siteId, including the 'wins over slug' precedence. The description restates the id/slug choice without adding format or fallback behavior beyond the schema, which is the baseline-3 case.

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 (get) and resource (one Stripe product) plus the lookup keys (id or metadata.slug), and the singular framing distinguishes it from the plural stripe_search_products / stripe_list_categories siblings. It stops short of explicitly naming the alternative, so a 4 rather than 5.

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

Usage Guidelines3/5

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

Usage is only implied: 'by id or metadata.slug' tells the agent this is a direct single-record lookup, which suggests using it when the identifier is already known and search_products otherwise. No explicit when-to-use or when-not-to-use statement, and no sibling is named.

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

stripe_list_categoriesStripe: list categoriesB
Read-only
Inspect

Distinct metadata.category values in the site's Stripe catalog, with product counts and an image.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteIdNoSite id.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the only return-shape signal available (since there is no output schema) by promising distinct categories with counts and an image, but it omits pagination, result limits, and behaviour on an empty/no-category catalog.

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 tight sentence with no filler, front-loaded on the resource (distinct metadata.category values) followed by the payload detail. Every clause earns its place; nothing could be cut without losing information.

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

Completeness3/5

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

One optional parameter and no output schema means the description must carry the return-contract burden, and it only partly does: it names the fields returned but not ordering, pagination, or empty-catalog behaviour. Adequate to invoke correctly, but thin for a no-output-schema listing tool.

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

Parameters3/5

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

Schema description coverage is 100%, and siteId is already documented as a Site id, so the schema carries the burden. The description adds nothing about how siteId scopes the call or its optionality (required count is 0), which is a missed opportunity but not a schema gap. 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+resource: listing distinct metadata.category values from the site's Stripe catalog, plus what accompanies each entry (product counts, image). This clearly separates it from sibling reads like stripe_get_product or stripe_search_products, though it never names those siblings explicitly.

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?

No when-to-use guidance and no alternatives named, despite three Stripe siblings (stripe_connect, stripe_get_product, stripe_search_products) that an agent must choose between. The purpose implies the scenario but does not state it, and prerequisites/permissions are unmentioned.

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

stripe_search_productsStripe: search productsB
Read-only
Inspect

Search the site's live Stripe products (id, title, price, image, metadata).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoalpha | price_asc | price_desc | newest | oldest (applied client-side).
limitNoDefault 50.
queryNoMatches name/description; omit to list all.
siteIdNoSite id.
categoryNometadata.category exact match.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'live' qualifier (implying non-test Stripe data) and lists return fields, but says nothing about pagination, rate limits, or result caps.

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 front-loaded sentence with zero filler. Resource and returned fields come first, and nothing is repeated unnecessarily.

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

Completeness4/5

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

For a read-only search with no output schema, the description helpfully enumerates the returned fields. All five parameters are documented in the schema. Only minor gaps remain (pagination/result-size behavior), so it is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, with sort, limit, query, siteId, and category each documented in the schema itself. The description contributes no additional parameter meaning, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (Search) and resource (the site's live Stripe products) and even enumerates the returned fields (id, title, price, image, metadata). This clearly distinguishes it from stripe_get_product (single fetch), though it never names that sibling or explains the search-vs-get boundary explicitly.

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?

The description provides no when-to-use guidance, no mention of alternatives like stripe_get_product or refresh_products, and no conditions or exclusions. The only usage hint (omit query to list all) lives in the schema, not the description.

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

suggest_font_pairingsSuggest font pairingsA
Read-only
Inspect

Show 3 font pairings (heading + body Google Fonts) for the user to pick from. Does NOT change the site; the chosen pairing is applied separately with set_theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsYes3 options: { name, description?, styleGuide: { headingFontFamily, bodyFontFamily, accentFontFamily?, radiusBox?, shadowStyle? }, palette? }.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description nonetheless adds workflow context beyond the annotations: it explicitly says it does not mutate the site and names set_theme as the tool that performs the write. That is a useful addition, though no return or pagination behavior is described.

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

Conciseness5/5

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

Two tight sentences, zero filler, and the non-mutating constraint plus the set_theme handoff are front-loaded. Every clause earns its place.

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

Completeness3/5

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

For a read-only tool with a rich nested schema and no output schema, the description covers the mutation boundary but leaves gaps: it never explains that the caller must supply the candidate 'options' (despite them being required) or what the tool returns (e.g., the selected pairing). An agent has enough to call it safely but not to fully predict the interaction.

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

Parameters3/5

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

Schema description coverage is 100% and the schema's own 'options' description already spells out the shape ('{ name, description?, styleGuide: {...}, palette? }'). The description adds only the 'Google Fonts' qualifier and mentions heading+body while the schema also permits accentFontFamily, so it neither adds much nor fully reconciles. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource ('Show 3 font pairings (heading + body Google Fonts)') and counts the output, which is more than a tautology of the name. It also distinguishes itself from the mutation sibling by noting it does not change the site. Minor tension: the required 'options' input is not acknowledged by the 'show 3 pairings' phrasing, so the precise action is slightly ambiguous.

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?

Names the alternative and the workflow condition explicitly: 'the chosen pairing is applied separately with set_theme.' This tells the agent when to reach for this tool versus set_theme. It stops short of stating when NOT to use it or routing to suggest_palettes, but the core routing is clear.

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

suggest_palettesSuggest palettesA
Read-only
Inspect

Show 3 palette options for the user to pick from. Does NOT change the site; the chosen palette is applied separately with set_theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsYes3 options: { name, description, palette: 12 { name, color } — Primary, Primary Text, Secondary, Secondary Text, Accent, Accent Text, Neutral, Neutral Text, Background, Text, Alternate Background, Alternate Text }.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description reinforces this with 'Does NOT change the site' and adds the two-step workflow context (choice applied later via set_theme). It does not disclose anything about the interactive/UI nature of the call or what the tool returns to the agent.

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

Conciseness5/5

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

Two short sentences with zero filler, and the most important constraint (does not change the site) is front-loaded alongside the routing hint.

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

Completeness4/5

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

For a simple read-only, single-parameter tool with a fully documented schema and no output schema, the description covers purpose, non-mutation, and the follow-up action. Only the nature of the user-facing interaction is left implicit.

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 parameter's nested structure (name, description, 12-color palette) is fully documented in the schema itself. The description adds no format or content guidance beyond the schema, 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 (show palette options for the user to pick), and explicitly distinguishes itself from the mutation path by naming set_theme. It is slightly ambiguous whether the tool generates the palettes or merely presents the options supplied in the input, but the core action is clear.

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

Usage Guidelines4/5

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

Gives a clear usage condition — this is the presentation/selection step, not the application step — and names the alternative sibling (set_theme) that performs the actual change. No explicit exclusions beyond that, but the when-to-use is unambiguous.

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

unpublish_siteUnpublish siteC
DestructiveIdempotent
Inspect

Take the site offline.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false, so the safety profile is fully covered. The description adds nothing beyond that — it does not say whether the live URL stops resolving, whether the site can be republished, or how long the change takes to propagate.

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

Conciseness4/5

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

A single four-word sentence with zero padding and the action front-loaded. It is efficient, though so terse that brevity shades into under-specification rather than true conciseness.

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

Completeness3/5

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

For a low-complexity tool with one optional, fully documented parameter and rich annotations, the description is minimally sufficient. It still omits the consequence of the operation (live site going dark, reversibility via publish_site), which is the one thing an agent would want for a destructive call.

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% for the single 'id' parameter, so the schema carries the meaning. The description adds no information about the identifier (e.g., that it is the site id, not a domain), which is acceptable at this coverage level but no better than baseline.

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

Purpose4/5

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

The description states a specific action and resource — taking the site offline — which maps unambiguously to unpublishing. It is clear enough to distinguish from publish_site by implication, though it never names the counterpart tool or what 'offline' means operationally.

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

Usage Guidelines2/5

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

There is no guidance on when to unpublish versus alternatives, no prerequisites, and no mention of the obvious sibling publish_site. The agent must infer the usage context entirely.

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

update_collection_rowUpdate collection rowA
DestructiveIdempotent
Inspect

Partially update one row by rowId; omitted fields keep their values.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
dataYesField key → value.
slugYesCollection slug.
rowIdYesMongo _id of the row.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond them: this is a merge-style patch where 'omitted fields keep their values', which is not derivable from the annotation set.

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 sentence with zero filler, front-loaded with the operation and immediately followed by the one semantic detail that matters (partial/merge behavior). Nothing could be removed without losing meaning.

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

Completeness4/5

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

For a mutation tool whose destructive and idempotent traits are already in annotations, the description covers the critical merge semantics. It is slightly thin on the nested 'data' object (field-name conventions, value typing) and says nothing about failure modes for a bad rowId, but no output schema means return values need not be explained.

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 all four parameters (id, slug, rowId, data) are documented in the schema itself. The description only restates that rowId addresses the row, adding no syntax or format detail beyond what the schema provides, so 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?

The description gives a specific verb and scope: 'Partially update one row' plus the addressing key 'by rowId'. It does not distinguish itself from siblings like create_collection_row, delete_collection_row or update_collection_schema, but the operation itself is unambiguous.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives such as update_collection_schema (structure) or create_collection_rows (insertion). The reader must infer that this is the tool for changing values in an existing row.

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

update_collection_schemaUpdate collection schemaA
DestructiveIdempotent
Inspect

Replace a collection's whole field list (get_collection returns the current one). Existing rows keep stale keys until edited.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
slugYesCollection slug.
schemaYesFull field list; replaces the old one.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real value the annotations cannot: 'Existing rows keep stale keys until edited' discloses the concrete data consequence of removal. It does not state permission requirements or whether removed field data is recoverable, so it stops short of a 5.

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

Conciseness5/5

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

Two sentences with zero filler; the replace semantics are front-loaded, and the destructive consequence follows immediately. Every clause earns its place.

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

Completeness4/5

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

With no output schema and full param coverage in the input schema, the description needs only to cover destructive behavior, which it does via the stale-keys note. Minor gaps remain around auth/permissions and whether removed fields affect existing data irreversibly.

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 'slug', 'id', and 'schema' (including 'Full field list; replaces the old one'). The description's 'whole field list' phrasing reinforces the replace semantics but adds no format or syntax detail beyond the schema, 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+resource ('Replace a collection's whole field list') and clarifies the scope is the entire schema, not a per-field edit, which separates it from update_collection_row. It also names get_collection as the read counterpart, giving an agent enough to place it among siblings.

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 parenthetical 'get_collection returns the current one' implies a read-then-replace workflow, which is useful implied guidance. However, there is no explicit when-to-use/when-not, nor a warning about when this is preferable to more targeted row/schema operations.

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

update_pageUpdate pageA
DestructiveIdempotent
Inspect

Update a page: name (changes the slug), SEO, home/404/hidden flags, per-page headCode/bodyClass, hideHeader/hideFooter/hideChrome, pathPattern (dynamic detail-page URL). A page without seo.title / seo.description falls back to the site title (update_site), not its name. headCode holds third-party code, not page content. Guide: get_style_reference({ topic: "pages" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
seoNoPer-page SEO fields to set.
nameNoNew name; changes the slug.
pageIdYesPage id from list_pages.
headCodeNoRaw HTML for this page's <head>, server-rendered. Empty string clears. Site-wide: ROOT.props.inject.head.
isHiddenNoHidden pages aren't reachable by URL.
bodyClassNoClasses on <body> for this page. Empty string clears.
is404PageNoMake it the 404 page.
hideChromeNoHide ALL ROOT-level chrome (header, footer, sticky bars, drawers) — for ad landing pages.
hideFooterNoHide the global footer on this page.
hideHeaderNoHide the global header on this page.
isHomePageNoMake it home (unsets the current one).
pathPatternNoURL tail AFTER the page's own slug, for detail pages. Segments are literal or `:param`, no leading slash, no spaces: `:slug` on page "Car" serves /car/<slug>; `products/:handle` on "Shop" serves /shop/products/<handle>. Read captures in a Data node's dataSource as `{{params.<name>}}` (e.g. filter { slug: "{{params.slug}}" }). Empty string clears.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag destructive=true, idempotent=true, openWorld=false, so the safety profile is covered. The description adds genuine behavioral detail beyond them: renaming changes the slug, empty strings clear headCode/bodyClass, isHomePage unsets the current home page, isHidden pages aren't URL-reachable, and hideChrome targets ad landing pages. It stops short of warning that a slug change breaks existing links.

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 list of updatable areas, then adds non-obvious caveats (fallback behavior, clearing semantics) and a guide pointer. Some of the field enumeration restates the schema, but the sentences carrying unique constraints justify their length.

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

Completeness5/5

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

For a 13-parameter mutation tool with a nested seo object, the description covers side effects (slug change, home reassignment), clearing semantics, and fallback rules, while annotations carry the safety profile and no output schema exists. An agent has enough to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics not present in the schema: the seo.title/seo.description fallback to the site title rather than the page name, and that headCode is for third-party code rather than page content. Most other field notes (slug change, pathPattern format) duplicate 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?

Opens with a specific verb+resource ('Update a page') and enumerates the exact field groups it touches (name/slug, SEO, home/404/hidden flags, headCode/bodyClass, chrome hiding, pathPattern). This clearly separates it from siblings like add_page, delete_page, and update_site.

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: it notes that site-level fallback behavior belongs to update_site and points to get_style_reference({ topic: "pages" }) for guidance, which is useful routing. But it never says explicitly when to choose this over add_page/delete_page or that it is the tool for modifying an existing page found via list_pages, leaving the agent to infer.

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

update_siteUpdate siteA
Destructive
Inspect

Update the site's name (URL slug), title, description, ogImage, search indexing, AI-crawler blocking, timezone or mount origin/key — immediate, no publish. title/description/ogImage are the fallback , description and og:image for pages without their own seo. Empty string clears. Details: get_style_reference({ topic: "site" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
nameNoURL slug (subdomain): lowercase letters, digits, hyphens.
titleNoSite-wide fallback <title>.
ogImageNohttps URL, 1200×630.
timezoneNoIANA timezone for form notification emails, e.g. "America/Los_Angeles". Empty string = UTC.
crawlModeNopublic = indexed. noindex = viewable by link, kept out of search (use for a client copy not yet on its own domain). private_preview = noindex + robots.txt Disallow.
descriptionNoSite-wide fallback meta description.
mountOriginNoOrigin of the Next.js app serving this site via @pagehub/next, e.g. "https://app.example.com". Needs publish_site static: true.
rotateMountKeyNotrue issues a new mount key (returned once) and invalidates the old one.
blockAiCrawlersNotrue blocks known AI crawlers in robots.txt and turns off /llms.txt. Search engines unaffected.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-redundant behavior: changes are applied immediately with no publish step, an empty string clears a value, title/description/ogImage act as fallback SEO only for pages lacking their own, and mount key rotation is destructive to the previous key. It still doesn't say whether the update is partial/patch-style or what happens to omitted fields, which matters for a destructive, non-idempotent update.

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 the field list, followed by two short clarifying sentences (fallback semantics, empty-string clearing) and a pointer to get_style_reference. It is dense but every clause carries information; the only mild cost is that the field enumeration makes the first sentence very long.

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 10-parameter, 0-required, no-output-schema mutation tool this is close to sufficient: it names the affected attributes, the clearing convention, immediate-effect behavior, and points to get_style_reference for detail. The remaining gap is that it never states the semantics of a partial update (unset fields left unchanged) nor the permissions/publish precondition for mountOrigin, which the agent would need to call confidently.

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, and the description legitimately earns above that: it explains the fallback semantics of title/description/ogImage (only used for pages without their own SEO), the 'empty string clears' convention, and glosses the crawl/indexing and AI-crawler options, which map to crawlMode and blockAiCrawlers. rotateMountKey's 'returned once' detail is left to the schema, so it isn't fully self-contained.

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 (update) and resource (site) and enumerates the mutable fields so an agent knows exactly what this tool covers: name/slug, title, description, ogImage, indexing, AI-crawler blocking, timezone, mount origin/key. It doesn't explicitly contrast itself with the adjacent mutation tools (patch_site_bulk, patch_site_node, create_site), but the field enumeration makes its scope unambiguous.

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

Usage Guidelines3/5

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

The clause 'immediate, no publish' tells the agent changes take effect without publish_site, which is useful selection context, and the get_style_reference({ topic: "site" }) pointer routes to further detail. However there is no explicit when-to-use/when-to-use-something-else guidance, and no statement of prerequisites such as needed permissions or the publish_site static: true dependency for mountOrigin (that only appears in the schema).

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

update_site_emailUpdate site emailA
DestructiveIdempotent
Inspect

Save a site email's subject, preheader and/or full flat node map, or reset: true. Validated: unknown variables, missing/duplicate required slots and unsupported classes are rejected. Theme and company data are injected at send time. preview_site_email renders the saved result.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
kindYesEmail kind from list_site_emails.
nodesNoFull flat node map (ROOT + every node).
resetNoRestore the default email.
subjectNo≤200 chars; empty = default.
preheaderNoInbox preview text, ≤200 chars; empty = default.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lowered, yet the description still adds real value: validation behavior (unknown variables, missing/duplicate required slots, unsupported classes are rejected) and the fact that theme and company data are injected at send time rather than stored. It does not spell out partial-update semantics for unspecified fields, which matters for 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?

Three tight sentences with no filler, and the core action plus the reset alternative are front-loaded. Structure is good; density is high enough that a slightly clearer separation of write-vs-render would help, but nothing is wasted.

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

Completeness4/5

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

No output schema exists, but the description covers the return path by pointing to preview_site_email for rendering the saved result. Given a destructive, idempotent 6-parameter mutation tool, the main remaining gap is what happens to fields the caller omits (implicit 'and/or' partial update), which is left to inference.

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 baseline is 3. The description largely restates the schema's own fields (subject, preheader, nodes, reset) and adds only the validation angle, which is behavioral rather than parameter syntax; empty-string-equals-default is already in 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?

Specific verb+resource: 'Save a site email's subject, preheader and/or full flat node map, or reset: true' tells the agent exactly what is mutated and which fields are in play. It also names the downstream sibling preview_site_email, which helps separate saving from rendering, but it does not explicitly contrast with the read siblings get_site_email / list_site_emails.

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: the agent gathers that this is the write counterpart to preview_site_email and get_site_email, and that reset:true restores defaults. There is no explicit 'use this when...' clause, no precondition (e.g. that id/kind must come from list_site_emails), and no exclusion of alternatives.

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

upload_fileUpload fileAInspect

Upload any plan-allowed file. Images go to the CDN (type "cdn"); video/audio/pdf/zip go to R2 (type "r2" + public url) for a Link, a collection field, or a Video node (provider "r2", videoId = mediaId). Web files: fileUrl. dataBase64 is a last resort (~3MB cap; pass mimeType for non-images).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
fileUrlNoPublic URL of the original file — no resize params.
privateNoStore privately for set_download (any type; no public url). Needs filePath.
filenameNoFilename hint.
mimeTypeNoRequired with dataBase64 for non-images, e.g. video/mp4, application/pdf.
dataBase64NoBase64 or data URL. Last resort: ~3MB cap.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only cover the generic safety profile (not read-only, not destructive, not idempotent, open world). The description adds real behavioral context: storage routing (CDN vs R2), public-URL side effect, the ~3MB base64 cap, and the private-storage/no-public-url mode for set_download. It does reference a `type` ("cdn"/"r2") parameter that does not exist in the schema, which muddies rather than clarifies behavior.

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

Conciseness4/5

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

Front-loaded with the core action and destination routing, and uses compact shorthand without filler. It is dense to the point of being cryptic in places (e.g., "provider 'r2', videoId = mediaId"), but every sentence carries information.

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

Completeness3/5

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

Covers routing, the private flag, and the base64 fallback, but with no output schema the description never says what the upload returns (media id, public URL shape, failure modes), and it is silent on the required `id`/site context and the relationship to sibling upload_image. Adequate but with clear gaps for a 6-parameter 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 the schema already documents all six parameters and the baseline is 3. The description adds routing meaning (which input maps to which storage destination) but also invents a `type` parameter absent from the schema, creating a mismatch rather than added semantic clarity.

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

Purpose4/5

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

States a specific verb+resource ("Upload any plan-allowed file") and describes routing by file type, which tells the agent this is the general-purpose uploader. However, it never distinguishes itself from the sibling upload_image — it even says images go through this tool (type "cdn") — so the boundary between the two is left ambiguous.

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 gives parameter-level routing advice (use `fileUrl` for web files, `dataBase64` as a last resort) and notes `private` is needed for set_download, which implies usage. But it never states when to choose upload_file over upload_image or find_image, nor any prerequisites like site selection or plan restrictions beyond "plan-allowed."

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

upload_imageUpload imageAInspect

Upload an image to the site's media library. Returns a mediaId, which goes in an Image's src with type "cdn" (never content, which is deprecated). Web images: imageUrl. dataBase64 has a ~3MB cap and is costly in tokens. More: get_style_reference({ topic: "media" }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSite id.
filenameNoFilename hint.
imageUrlNoPublic URL of the ORIGINAL full-size image — no ?w= / h= / q= resize params.
mimeTypeNoWith dataBase64 (default image/jpeg).
dataBase64NoBase64 or data URL. Last resort: ~3MB cap.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the write (readOnlyHint=false), non-idempotent, non-destructive, open-world profile. The description adds real value beyond that: the exact downstream consumption rule for the returned mediaId (src with type "cdn", never the deprecated "content"), and cost/size warnings for dataBase64.

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

Conciseness5/5

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

Front-loads the purpose in the first clause, then layers return-value usage, source selection, and a pointer to further docs. Dense but every sentence carries a distinct instruction with no filler.

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

Completeness4/5

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

With no output schema, the description correctly documents the return value (mediaId) and how to consume it, plus size/cost constraints. Complete enough for a 5-param, 0-required upload tool; minor omission is that nothing states required permissions or that no parameters are mandatory.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely enriches semantics by clarifying the imageUrl-vs-dataBase64 tradeoff and the token/size cost of base64. It does not add detail on id/filename/mimeType, so it is above baseline but not exhaustive.

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: 'Upload an image to the site's media library,' and names the return value (mediaId). It is clearly an image-upload tool distinguishable from upload_file by resource type, though it never explicitly contrasts with that sibling.

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 context: use `imageUrl` for web images, reserve `dataBase64` as a last resort due to its ~3MB cap and token cost, and points to get_style_reference({ topic: "media" }) for more. No explicit when-not or hard exclusions, but the selection guidance between the two source params is clear.

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

validate_button_classesValidate button classesA
Read-only
Inspect

Check a Button className for variant conflicts and token misuse; optionally auto-fix it.

ParametersJSON Schema
NameRequiredDescriptionDefault
autoFixNoReturn fixed classes/modifiers (default true).
classNameYesButton className.
intentVariantNoprimary | outline | ghost.
activeModifiersNoCurrent modifiers, e.g. ["btn-neon"].
allowCustomClassesNofalse = hardcoded colors are errors, not warnings (default true).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds what is checked and mentions optional auto-fixing, but 'auto-fix it' is ambiguous against a read-only annotation, and no return format or rate/auth behavior is disclosed.

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 front-loaded sentence with no wasted words. It states the core action and the optional behavior compactly.

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

Completeness3/5

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

There is no output schema, so the description should explain the return shape (issues, fixed classes, severity), but it does not. It also fails to clarify whether autoFix applies changes or merely returns them, leaving a meaningful gap for a validation tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no syntax or format detail beyond what the schema provides, making the baseline 3 appropriate.

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 ('Check') and resource ('Button className'), plus the exact problems it looks for (variant conflicts and token misuse). It does not explicitly distinguish itself from the sibling generate_button_classes, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies the tool is for validating an existing Button className, but it never says when to use this versus generate_button_classes or any alternative. Usage is inferable but not guided.

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. 2 tool updates
    • Changedpatch_site_node2 fields changed
      • changedInput schema / properties / propsPatch / description
        Previous value: -"Non-class props (text, src, href, alt, tagName, action, root, …)."New value: +"Non-class props. Objects merge: { dataSource: { filter } } keeps provider."
      • changedInput schema / properties / unsetProps / description
        Previous value: -"Dotted prop paths to delete, e.g. \"seo.jsonLd\"."New value: +"Keys or dotted paths to delete, e.g. \"dataSource.filter\"."
    • Addedrefresh_products
  2. 3 tool updates
    • Changedget_site_email1 field changed
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "order_receipt",
        -  "subscription_welcome",
        -  "gift_card_gifted",
        -  "gift_card_self",
        -  "customer_login",
        -  "download_delivery",
        -  "download_update"
        -]New value: +[
        +  "order_receipt",
        +  "subscription_welcome",
        +  "order_shipped",
        +  "gift_card_gifted",
        +  "gift_card_self",
        +  "customer_login",
        +  "download_delivery",
        +  "download_update"
        +]
    • Changedpreview_site_email1 field changed
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "order_receipt",
        -  "subscription_welcome",
        -  "gift_card_gifted",
        -  "gift_card_self",
        -  "customer_login",
        -  "download_delivery",
        -  "download_update"
        -]New value: +[
        +  "order_receipt",
        +  "subscription_welcome",
        +  "order_shipped",
        +  "gift_card_gifted",
        +  "gift_card_self",
        +  "customer_login",
        +  "download_delivery",
        +  "download_update"
        +]
    • Changedupdate_site_email1 field changed
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "order_receipt",
        -  "subscription_welcome",
        -  "gift_card_gifted",
        -  "gift_card_self",
        -  "customer_login",
        -  "download_delivery",
        -  "download_update"
        -]New value: +[
        +  "order_receipt",
        +  "subscription_welcome",
        +  "order_shipped",
        +  "gift_card_gifted",
        +  "gift_card_self",
        +  "customer_login",
        +  "download_delivery",
        +  "download_update"
        +]
  3. 2 tool updates
    • Addedget_import_status
    • Addedimport_site
  4. 4 tool updates
    • Addedlist_downloads
    • Addedremove_download
    • Addedset_download
    • Changedupload_file1 field changed
      • addedInput schema / properties / private
        Added value: +{
        +  "description": "Store privately for set_download (any type; no public url). Needs filePath.",
        +  "type": "boolean"
        +}
  5. 57 tool updates
    • Changedadd_nodes1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedadd_page1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedapply_kit_block1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedcheck_domain1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedclear_domain1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedcreate_collection5 fields changed
      • addedInput schema / properties / description / description
        Added value: +"What it holds."
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / isPublic / description
        Added value: +"Visitors can read rows without auth."
      • addedInput schema / properties / name / description
        Added value: +"Display name."
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
    • Changedcreate_collection_row3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changedcreate_collection_rows3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changeddelete_collection3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changeddelete_collection_row6 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / rowId
        Added value: +{
        +  "description": "Row _id.",
        +  "maxLength": 24,
        +  "type": "string"
        +}
      • removedInput schema / properties / row_id
        Removed value: -{
        -  "maxLength": 24,
        -  "type": "string"
        -}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
      • changedInput schema / required
        Previous value: -[
        -  "slug",
        -  "row_id"
        -]New value: +[
        +  "slug",
        +  "rowId"
        +]
    • Changeddelete_node1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changeddelete_page1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedget_collection2 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
    • Changedget_domain_status1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedget_portal1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedget_site_chat1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedget_site_email1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedget_site_node1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedimport_collection_csv3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changedinsert_node1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedinvite_site_member1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedlist_collection_rows4 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / description
        Added value: +"Default 50, max 200."
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changedlist_collections2 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "description": "Site id. Pass it on every call.",
        -  "maxLength": 256,
        -  "type": "string"
        -}
    • Changedlist_pages1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedlist_site_emails1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedlist_site_members1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedlist_site_nodes1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedmove_node1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedpatch_site_bulk1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedpatch_site_node1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedpreview_site_email1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedpublish_site1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedremove_portal1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedrevoke_site_invite4 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
      • addedInput schema / properties / inviteId
        Added value: +{
        +  "description": "Invite id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • removedInput schema / properties / invite_id
        Removed value: -{
        -  "description": "Invite id.",
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "invite_id"
        -]New value: +[
        +  "inviteId"
        +]
    • Changedscreenshot_site1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedsearch_site_nodes1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_checkout12 fields changed
      • addedInput schema / properties / collectionSlug
        Added value: +{
        +  "description": "Collection to sell.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • removedInput schema / properties / collection_slug
        Removed value: -{
        -  "description": "Collection to sell.",
        -  "maxLength": 128,
        -  "type": "string"
        -}
      • addedInput schema / properties / inventoryField
        Added value: +{
        +  "description": "Row field with stock count.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • removedInput schema / properties / inventory_field
        Removed value: -{
        -  "description": "Row field with stock count.",
        -  "maxLength": 128,
        -  "type": "string"
        -}
      • addedInput schema / properties / priceField
        Added value: +{
        +  "description": "Row field with the display price.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / priceIdField
        Added value: +{
        +  "description": "Row field holding a Stripe price id. Omit to charge `price`.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • removedInput schema / properties / price_field
        Removed value: -{
        -  "description": "Row field with the display price.",
        -  "maxLength": 128,
        -  "type": "string"
        -}
      • removedInput schema / properties / price_id_field
        Removed value: -{
        -  "description": "Row field holding a Stripe price id. Omit to charge `price`.",
        -  "maxLength": 128,
        -  "type": "string"
        -}
      • changedInput schema / properties / siteId / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
      • addedInput schema / properties / variantsField
        Added value: +{
        +  "description": "Row field with a variants array (each with its own priceId).",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • removedInput schema / properties / variants_field
        Removed value: -{
        -  "description": "Row field with a variants array (each with its own priceId).",
        -  "maxLength": 128,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "collection_slug"
        -]New value: +[
        +  "collectionSlug"
        +]
    • Changedset_domain1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_domain_redirect_mode1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_favicon1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_integrations1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_portal1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_redirects1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_site_chat1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedset_theme1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedstripe_connect1 field changed
      • changedInput schema / properties / siteId / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedstripe_get_product1 field changed
      • changedInput schema / properties / siteId / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedstripe_list_categories1 field changed
      • changedInput schema / properties / siteId / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedstripe_search_products1 field changed
      • changedInput schema / properties / siteId / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedunpublish_site1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedupdate_collection_row7 fields changed
      • addedInput schema / properties / data / description
        Added value: +"Field key → value."
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / rowId
        Added value: +{
        +  "description": "Mongo _id of the row.",
        +  "maxLength": 24,
        +  "type": "string"
        +}
      • removedInput schema / properties / row_id
        Removed value: -{
        -  "description": "Mongo _id of the row.",
        -  "maxLength": 24,
        -  "type": "string"
        -}
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
      • changedInput schema / required
        Previous value: -[
        -  "slug",
        -  "row_id",
        -  "data"
        -]New value: +[
        +  "slug",
        +  "rowId",
        +  "data"
        +]
    • Changedupdate_collection_schema4 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Site id.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / schema / description
        Added value: +"Full field list; replaces the old one."
      • removedInput schema / properties / site_id
        Removed value: -{
        -  "maxLength": 256,
        -  "type": "string"
        -}
      • addedInput schema / properties / slug / description
        Added value: +"Collection slug."
    • Changedupdate_page1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedupdate_site1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedupdate_site_email1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedupload_file1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
    • Changedupload_image1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Site id. Pass it on every call."New value: +"Site id."
  6. 1 tool update
    • Changedupdate_site2 fields changed
      • addedInput schema / properties / crawlMode
        Added value: +{
        +  "description": "public = indexed. noindex = viewable by link, kept out of search (use for a client copy not yet on its own domain). private_preview = noindex + robots.txt Disallow.",
        +  "enum": [
        +    "public",
        +    "noindex",
        +    "private_preview"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / ogImage
        Added value: +{
        +  "description": "https URL, 1200×630.",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
  7. 1 tool update
    • Changedupdate_page1 field changed
      • addedInput schema / properties / pathPattern
        Added value: +{
        +  "description": "URL tail AFTER the page's own slug, for detail pages. Segments are literal or `:param`, no leading slash, no spaces: `:slug` on page \"Car\" serves /car/<slug>; `products/:handle` on \"Shop\" serves /shop/products/<handle>. Read captures in a Data node's dataSource as `{{params.<name>}}` (e.g. filter { slug: \"{{params.slug}}\" }). Empty string clears.",
        +  "maxLength": 512,
        +  "type": "string"
        +}
  8. 3 tool updates
    • Changedget_style_reference1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "design",
        -  "accessibility",
        -  "domains",
        -  "blocks",
        -  "editing",
        -  "theme",
        -  "pages",
        -  "media",
        -  "integrations",
        -  "section-tree"
        -]New value: +[
        +  "design",
        +  "accessibility",
        +  "domains",
        +  "blocks",
        +  "editing",
        +  "theme",
        +  "pages",
        +  "site",
        +  "media",
        +  "integrations",
        +  "animation",
        +  "section-tree"
        +]
    • Changedset_theme2 fields changed
      • addedInput schema / properties / animations
        Added value: +{
        +  "description": "Upserted by key into theme.animations; nodes then use root.animation \"site:<key>\". Only for motion no built-in preset covers. Rules + examples: get_style_reference({ topic: \"animation\" }).",
        +  "items": {
        +    "properties": {
        +      "direction": {
        +        "enum": [
        +          "normal",
        +          "reverse",
        +          "alternate",
        +          "alternate-reverse"
        +        ],
        +        "type": "string"
        +      },
        +      "duration": {
        +        "description": "Seconds, 0.05–30.",
        +        "type": "number"
        +      },
        +      "easing": {
        +        "description": "easeOut | easeIn | easeInOut | linear | spring | cubic-bezier() | steps()",
        +        "maxLength": 80,
        +        "type": "string"
        +      },
        +      "iterations": {
        +        "description": "\"1\"–\"20\" or \"infinite\".",
        +        "maxLength": 8,
        +        "type": "string"
        +      },
        +      "key": {
        +        "description": "Slug /^[a-z][a-z0-9-]{0,39}$/, no \"site:\" prefix.",
        +        "maxLength": 40,
        +        "type": "string"
        +      },
        +      "keyframes": {
        +        "description": "Stops incl. at 0 and at 100.",
        +        "items": {
        +          "properties": {
        +            "at": {
        +              "description": "Percent, 0–100.",
        +              "type": "number"
        +            },
        +            "style": {
        +              "description": "Kebab-case CSS property → value, e.g. { \"clip-path\": \"inset(0 100% 0 0)\" }.",
        +              "type": "object"
        +            }
        +          },
        +          "required": [
        +            "at",
        +            "style"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 12,
        +        "minItems": 2,
        +        "type": "array"
        +      },
        +      "label": {
        +        "maxLength": 60,
        +        "type": "string"
        +      },
        +      "trigger": {
        +        "enum": [
        +          "scroll",
        +          "load",
        +          "continuous"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "label",
        +      "trigger",
        +      "duration",
        +      "easing",
        +      "iterations",
        +      "keyframes"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • addedInput schema / properties / removeAnimations
        Added value: +{
        +  "description": "Keys to delete from theme.animations.",
        +  "items": {
        +    "maxLength": 45,
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
    • Changedupdate_site4 fields changed
      • changedInput schema / properties / blockAiCrawlers / description
        Previous value: -"true adds a robots.txt Disallow for known AI crawlers (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, …) and turns off /llms.txt + /llms-full.txt. Search engines are unaffected. Off also means AI assistants can read the site to answer questions or book on the visitor's behalf. Takes effect immediately, no publish needed."New value: +"true blocks known AI crawlers in robots.txt and turns off /llms.txt. Search engines unaffected."
      • changedInput schema / properties / mountOrigin / description
        Previous value: -"Origin of your own Next.js app when it serves this site at its root through @pagehub/next, e.g. \"https://app.example.com\" — https, no path or trailing slash. Canonical URLs, og:url and the sitemap then use that origin, and the page's form, analytics and favicon calls go through the app's /_pagehub/ path. The site must have static delivery on (publish_site static: true). Setting it issues a mount key (returned once) that the app must send so PageHub sees each visitor's real IP; clearing it removes the key. Empty string clears it. Takes effect immediately, no publish needed."New value: +"Origin of the Next.js app serving this site via @pagehub/next, e.g. \"https://app.example.com\". Needs publish_site static: true."
      • changedInput schema / properties / rotateMountKey / description
        Previous value: -"true issues a new mount key and invalidates the old one (the site must have a mountOrigin). The new key is returned once — set it as PAGEHUB_MOUNT_KEY in the host app, or that app's visitors share one IP for rate limits and analytics until you do."New value: +"true issues a new mount key (returned once) and invalidates the old one."
      • changedInput schema / properties / timezone / description
        Previous value: -"The business's IANA timezone, e.g. \"America/Los_Angeles\". Times in the site's form notification emails are shown in it; empty string clears it (UTC). Takes effect immediately, no publish needed."New value: +"IANA timezone for form notification emails, e.g. \"America/Los_Angeles\". Empty string = UTC."
  9. 1 tool update
    • Changedupdate_site2 fields changed
      • addedInput schema / properties / mountOrigin
        Added value: +{
        +  "description": "Origin of your own Next.js app when it serves this site at its root through @pagehub/next, e.g. \"https://app.example.com\" — https, no path or trailing slash. Canonical URLs, og:url and the sitemap then use that origin, and the page's form, analytics and favicon calls go through the app's /_pagehub/ path. The site must have static delivery on (publish_site static: true). Setting it issues a mount key (returned once) that the app must send so PageHub sees each visitor's real IP; clearing it removes the key. Empty string clears it. Takes effect immediately, no publish needed.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / rotateMountKey
        Added value: +{
        +  "description": "true issues a new mount key and invalidates the old one (the site must have a mountOrigin). The new key is returned once — set it as PAGEHUB_MOUNT_KEY in the host app, or that app's visitors share one IP for rate limits and analytics until you do.",
        +  "type": "boolean"
        +}
  10. 2 tool updates
    • Addedget_site_chat
    • Addedset_site_chat
  11. 1 tool update
    • Changedset_theme1 field changed
      • removedInput schema / properties / image
        Removed value: -{
        -  "description": "Preview image URL.",
        -  "maxLength": 2048,
        -  "type": "string"
        -}
  12. 1 tool update
    • Changedupdate_site1 field changed
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "The business's IANA timezone, e.g. \"America/Los_Angeles\". Times in the site's form notification emails are shown in it; empty string clears it (UTC). Takes effect immediately, no publish needed.",
        +  "maxLength": 64,
        +  "type": "string"
        +}
  13. 1 tool update
    • Changedupdate_site1 field changed
      • addedInput schema / properties / blockAiCrawlers
        Added value: +{
        +  "description": "true adds a robots.txt Disallow for known AI crawlers (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, …) and turns off /llms.txt + /llms-full.txt. Search engines are unaffected. Off also means AI assistants can read the site to answer questions or book on the visitor's behalf. Takes effect immediately, no publish needed.",
        +  "type": "boolean"
        +}
  14. 79 tool updates
    • First observedadd_nodes
    • First observedadd_page
    • First observedapply_kit_block
    • First observedaudit_accessibility
    • First observedaudit_seo
    • First observedcheck_domain
    • First observedclear_domain
    • First observedcreate_collection
    • First observedcreate_collection_row
    • First observedcreate_collection_rows
    • First observedcreate_site
    • First observeddelete_collection
    • First observeddelete_collection_row
    • First observeddelete_node
    • First observeddelete_page
    • First observeddelete_site
    • First observedduplicate_site
    • First observedfind_icon
    • First observedfind_image
    • First observedfind_video
    • First observedgenerate_button_classes
    • First observedget_block
    • First observedget_collection
    • First observedget_component_schema
    • First observedget_domain_status
    • First observedget_portal
    • First observedget_site_email
    • First observedget_site_node
    • First observedget_style_reference
    • First observedimport_collection_csv
    • First observedinsert_node
    • First observedinvite_site_member
    • First observedlist_block_nodes
    • First observedlist_blocks
    • First observedlist_collection_rows
    • First observedlist_collections
    • First observedlist_pages
    • First observedlist_presets
    • First observedlist_site_emails
    • First observedlist_site_members
    • First observedlist_site_nodes
    • First observedlist_sites
    • First observedlist_templates
    • First observedmove_node
    • First observedpatch_site_bulk
    • First observedpatch_site_node
    • First observedpreview_site_email
    • First observedpublish_site
    • First observedpull_template
    • First observedremove_portal
    • First observedrevoke_site_invite
    • First observedscreenshot_site
    • First observedsearch_blocks
    • First observedsearch_site_nodes
    • First observedselect_site
    • First observedselect_template
    • First observedset_checkout
    • First observedset_domain
    • First observedset_domain_redirect_mode
    • First observedset_favicon
    • First observedset_integrations
    • First observedset_portal
    • First observedset_redirects
    • First observedset_theme
    • First observedstripe_connect
    • First observedstripe_get_product
    • First observedstripe_list_categories
    • First observedstripe_search_products
    • First observedsuggest_font_pairings
    • First observedsuggest_palettes
    • First observedunpublish_site
    • First observedupdate_collection_row
    • First observedupdate_collection_schema
    • First observedupdate_page
    • First observedupdate_site
    • First observedupdate_site_email
    • First observedupload_file
    • First observedupload_image
    • First observedvalidate_button_classes

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Perplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources