PageHub
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
- Status
- Healthy
- Uptime
- 99.6% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- https://pagehub.dev/api/mcp
TDQS
Scored across 112 tools
Most tools target distinct resources, but there is substantial overlap within clusters: upload_file vs upload_image, write_site_file vs edit_site_file vs edit_site_files, create_collection_row vs create_collection_rows vs import_collection_csv, and read_site_file vs search_site_files vs outline_page vs list_site_files. The detailed descriptions do disambiguate each case, but with 112 tools an agent must read a lot of prose to pick correctly, and some pairs (suggest_palettes vs list_presets vs set_theme) invite misselection.
Names are overwhelmingly snake_case verb_noun (create_collection, delete_page, update_site, list_orders) with sensible namespacing prefixes (stripe_, site_, set_/get_/list_). Minor deviations exist — noun-ish or nonstandard forms like stripe_connect, get_calendar, outline_page, apply_kit_block, and a plural-sibling pair (edit_site_file/edit_site_files) — but the overall pattern is predictable.
112 tools is far beyond a well-scoped set; the surface spans site building, files, theming, CMS, e-commerce, memberships, domains, emails, chat, imports and Stripe. Cognitive load for selection is extreme and many tools are narrow variants of one another, so the count is a poor fit even for a large site-builder domain.
Coverage is broad: full CRUD for pages, files, collections/rows, members/plans, orders, emails, domains, downloads, redirects and publishing, plus audits and history. Remaining gaps are minor — no way to list or delete uploaded media assets, no dedicated get_site settings read, and promo codes can only be toggled rather than deleted — but agents can generally work around them.
Available Tools
112 toolsadd_pageAdd pageAInspect
Create a page: pages/.liquid plus its record (the first page is home). text is the page's HTML + Liquid. Returns the pageId. seo.title + seo.description can be set here. Guide: get_style_reference({ topic: "pages" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| seo | No | Per-page SEO. | |
| name | Yes | Display name; becomes the slug ("Our Services" → /our-services). | |
| text | Yes | The page's HTML + Liquid (required). | |
| is404Page | No | Serve it for unmatched routes. | |
| isHomePage | No | Make it the home page (unsets the current one). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description adds real context beyond that by disclosing the on-disk side effect (creates pages/<slug>.liquid), that a slug is derived from the display name, and that the call returns a pageId. It does not say what happens on a slug collision or duplicate name, which is the main unstated behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the core action and artifacts front-loaded, followed by parameter hints and the guide pointer. The telegraphic fragment style ("Guide: get_style_reference(...)") is efficient, though the seo sentence is partly redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter creation tool with a nested seo object and no output schema, the description covers the return value (pageId), the produced file plus record, and where to look for style guidance. Missing only failure/duplicate-slug behavior to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter including the nested seo object; the description only reiterates that text is HTML+Liquid and that seo.title/seo.description are settable here. That is a minor reinforcement rather than new semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb and resource ("Create a page") and goes further by naming both artifacts produced: pages/<slug>.liquid and its record. It also states the return value (pageId), so an agent knows exactly what this tool does that update_page or create_site do not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context — the first page created is home, page name drives the slug, and SEO can be supplied at creation time — plus an explicit pointer to get_style_reference({topic:"pages"}) for guidance. It stops short of stating when to prefer this over update_page for an existing page.
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 blockADestructiveInspect
Place a library block (slug) into a page file as a copy with fresh ids (pageId; before/after = exact text there; position 0 = top). To design a section for this business, write it with edit_site_file and use get_block as reference. Guide: get_style_reference({ topic: "blocks" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | No | Block slug from search_blocks. | |
| after | No | Exact page text to insert after. | |
| before | No | Exact page text to insert before. | |
| pageId | No | Target page (default page_home). | |
| position | No | 0 = top of the page body (default: end). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false. The description adds non-obvious behavior beyond that: the inserted content is a copy with fresh ids, so the library source is untouched, and placement is controlled by exact anchor text or position 0. It does not spell out permission requirements or whether the page must be unpublished, which is the remaining gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses, front-loaded with the action and its core semantics, then the alternative and the reference guide. No filler sentences; 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter destructive mutation with no output schema, the description covers placement mechanics, the copy semantics, and the main alternative path. It stops short of stating what is returned (e.g., the new block ids) or any precondition on the target page, which leaves a modest gap for a write tool with destructiveHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, slug, after, before, pageId and position. The description restates the same semantics (before/after as exact text, position 0 = top, slug as a library block) without adding format, precedence (what happens if both before and after are given), or default details beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (place) and resource (library block identified by `slug`) plus the destination (a page file) and the key transformation (a copy with fresh ids). It also names the sibling tools it is not — get_block for reference, edit_site_file for custom design — so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative path: to design a section for this business, write it with edit_site_file and use get_block as reference. That is real when-not guidance. It does not explicitly say to find the `slug` via search_blocks/list_blocks in the description (that lives only in the schema), so it falls just short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_accessibilityAudit accessibilityARead-onlyIdempotentInspect
WCAG audit of a page of the site's draft (or a stock template): contrast, alt text, headings, ARIA, interactive elements. Returns violations by severity.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. Not with templateSlug. | |
| level | No | Default AA. | |
| pageId | No | Page id (default page_home). | |
| templateSlug | No | Template to audit instead of a site; pageId is then the page's url path, e.g. "/about". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description still adds real value by disclosing what is inspected and that results come back classified by severity, and by clarifying the target is the draft rather than the published site. It does not mention cost, timeout, or result-size characteristics of an audit run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the subject, scope, checks, and return format front-loaded; nothing redundant or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All four parameters are documented in the schema, annotations cover the safety profile, and the description states what the output contains despite no output schema. Minor gap: no indication of how large a violation report can get or whether partial results are possible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the enum for level, the pageId default, and the id/templateSlug exclusion are already documented in the schema. The description adds only a light framing of the draft-vs-template choice, which the schema already states more precisely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("WCAG audit of a page") and enumerates the checks performed (contrast, alt text, headings, ARIA, interactive elements), plus the return shape ("violations by severity"). It does not explicitly name the sibling audit_seo as a different-in-kind alternative, so an agent must infer the distinction from naming alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "site's draft (or a stock template)", which tells the agent this runs against unpublished content or templates rather than a live site. However, there is no explicit when-to-use/when-not guidance, no mention of a prerequisite (e.g. site must be selected), and no routing to audit_seo for SEO concerns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_seoAudit SEOARead-onlyIdempotentInspect
Score a page of the site's draft (or a stock template) for SEO: meta, heading hierarchy, alt text, link text, content depth. Returns fixes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. Not with templateSlug. | |
| pageId | No | Page id (default page_home). | |
| templateSlug | No | Template to audit instead of a site; pageId is then the page's url path, e.g. "/about". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that output is a set of fixes and that the target is the draft/template rather than the live site, but says nothing about cost, limits, or what happens on a published page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, zero filler, scope stated first and the return content tacked on at the end where it belongs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of return shape and only offers 'Returns fixes' — no structure, no scoring scale (a 'score' is promised but never characterized). For a multi-dimension audit tool that is a meaningful gap, though the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the id/templateSlug mutual exclusion, the page_home default, and the url-path semantics of pageId under templateSlug. The description only signals the site-vs-template mode at a high level, so baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (audit/score) and resource (a page of the site's draft or a stock template), and enumerates the audited dimensions: meta, heading hierarchy, alt text, link text, content depth. The SEO-vs-accessibility split from audit_accessibility is inferable from the listed checks, though the sibling is never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the applicable scope — the site's draft, or a stock template instead of a site — but never states when to pick this over audit_accessibility or how to handle published pages. Usage is inferable rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domainCheck domainARead-onlyIdempotentInspect
Preflight a candidate domain (apex + www): free, attached or erroring, plus the DNS records it would need. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| domain | Yes | Candidate domain, e.g. "example.com". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral detail beyond annotations: it checks both apex and www, reports free/attached/erroring status, includes required DNS records, and reinforces that nothing is changed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence, front-loaded with the verb and resource, and ends with the important non-mutation guarantee. Every clause adds relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only preflight tool with full schema coverage and rich annotations, the description provides enough context about what is checked and what kinds of results to expect. It does not explicitly explain how it relates to get_domain_status or set_domain, which keeps it short of fully complete routing guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds the useful detail that the candidate domain is checked at apex and www, but it does not explain the optional site id parameter, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: preflight a candidate domain, covering apex + www and returning free/attached/erroring status plus required DNS records. It implicitly differentiates from sibling mutation tools by saying it changes nothing, but it does not explicitly name alternatives such as get_domain_status or set_domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the word "preflight": this is a read-only check to run before attaching or changing a domain. However, the description gives no explicit when-to-use guidance, no exclusions, and no named alternative for checking an already-attached domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_domainClear domainADestructiveIdempotentInspect
Remove the custom domain from the active site. Detaches both apex and www variants from Vercel and resets redirectMode to none.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
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.
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.
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.
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.
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.
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.
connect_appConnect appAIdempotentInspect
Connect an app from list_apps: makes or reuses its collection and runs the first sync. inputs = the keys list_apps shows. A key the user pastes is stored encrypted and never shown again; never ask for one they haven't offered, point them to the hint for where to make it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| app | Yes | The [app: …] value from list_apps. | |
| name | No | Collection name, or the home's name for a calendar link. | |
| inputs | Yes | Input key → value, as list_apps lists them. | |
| bookingUrl | No | Rental tools and calendar links: the home's booking page there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare write, openWorld, idempotent, non-destructive; the description is consistent and adds real value beyond them: the collection is created or reused (explaining the idempotent hint) and a pasted secret key is stored encrypted and never shown again. That secret-handling and interaction constraint is exactly the kind of context annotations cannot convey. It stops short of describing failure modes or what a successful response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the core action and its effects come first, then input sourcing, then the secret-handling caveat. Phrasing is terse to the point of being clipped ('inputs = the keys list_apps shows'), which costs a little readability but wastes no sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter write tool with a nested inputs object, annotations, and no output schema, the description covers the prerequisite, side effects, idempotency, and the sensitive-input rule. Remaining gaps (behavior on invalid keys, whether name overrides the collection name) are mostly covered by the schema, so nothing critical is missing for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, app, name, inputs, and bookingUrl. The description clarifies that 'inputs' keys mirror what list_apps shows and that values in it may be pasted secrets, which adds some meaning, but it does not explain name or bookingUrl at all. 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Connect an app') and goes further to name the two effects: it makes or reuses the app's collection and runs the first sync. Tying the app identifier to list_apps makes the relationship with that sibling explicit, so an agent can tell which tool to call first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly establishes the prerequisite ('from list_apps') and constrains interaction behavior ('never ask for one they haven't offered, point them to the hint'). It gives clear context for when to use it, but never names the alternative for a subsequent re-sync (sync_collection) or states 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.
create_collectionCreate collectionAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | Yes | Display name. | |
| slug | Yes | Lowercase slug, [a-z][a-z0-9-]*. | |
| schema | No | Field definitions (shape in the tool description). | |
| source | No | { type: 'manual' } (default) | airtable | csv-upload | google-sheet | webhook-feed | external-db | hospitable. | |
| isPublic | No | Visitors can read rows without auth. | |
| description | No | What it holds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readonly, non-idempotent, non-destructive, open-world write. The description adds two useful behavioral facts beyond them: the plan gate and the default source of manual. It says nothing about what happens on a slug collision, whether creation is site-scoped, or what is returned, so the added context is real but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded verb phrase followed by the highest-value detail (the field-schema format), then defaults and gating. Dense and mostly waste-free, though the trailing "…" leaves the field-definition shape deliberately open rather than fully specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a nested object, no output schema, and full schema descriptions, the description covers the two things the schema cannot: the nested field-definition format and the source-type enum. Gaps remain around site scoping (the `id` parameter is only labeled "Site id") and the fact that slug uniqueness is likely enforced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description goes beyond it by spelling out the element shape of the `schema` array ({ key, label, type, required?, default?, help? }) and enumerating all twelve field types — details the schema itself only gestures at with "items: object". It does not add anything for `id`, `slug`, `isPublic`, or `description`, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Create a collection") and immediately explains what a collection's contents are (a field schema with typed entries), which distinguishes it from create_collection_row and list_collections in substance. It never names a sibling or explicitly contrasts with them, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Plan-gated" supplies a real precondition and "Source defaults to manual" clarifies the default path, but there is no explicit when-to-use guidance versus alternatives such as import_collection_csv (for CSV-sourced collections) or update_collection_schema for later edits. Usage is implied rather than directed.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| data | Yes | Field key → value. | |
| slug | Yes | Collection slug. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| rows | Yes | Row objects, max 500. | |
| slug | Yes | Collection slug. |
TDQS
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.
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.
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.
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.
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.
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, editor link and previewUrl. Then build it with the file tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Site slug. | |
| title | No | <title>. | |
| template | No | Template slug (default "acme"). | |
| description | No | Meta description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety and repeat-call profile is covered. The description's real addition is the return payload (id, editor link, previewUrl), valuable since no output schema exists, but it says nothing about slug uniqueness, template validity, permission requirements, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste: the action and its output are front-loaded, and the follow-up workflow hint comes second. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter creation tool with no output schema, the description covers the action, the default, the returned fields, and the next step. It could be more complete by pointing at list_templates for discovering non-default template slugs or by noting that the site is unpublished until publish_site.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented and baseline would be 3. The description earns a bump by explaining that the default template "acme" is the blank starter, which gives semantic meaning beyond the schema's bare "Template slug (default \"acme\")".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a site from a template") and adds scope detail (default "acme", the blank starter) plus what is returned. It does not explicitly differentiate itself from close siblings like duplicate_site, import_site, or pull_template, so an agent must infer which creation path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Then build it with the file tools" gives useful next-step routing to write_site_file/edit_site_file, so the workflow position is implied. However, there is no when-not guidance and no statement about choosing this over import_site, duplicate_site, or list_templates first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_collectionDelete collectionBDestructiveIdempotentInspect
Delete a collection and all its rows. No undo.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug. |
TDQS
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.
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.
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.
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.
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.
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 rowCDestructiveIdempotentInspect
Delete one row from a collection by rowId.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug. | |
| rowId | Yes | Row _id. |
TDQS
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.
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.
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.
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.
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.
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_componentDelete componentADestructiveIdempotentInspect
HTML-first sites: delete an unused component (refused while anything renders it).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| component | Yes | Component id from list_components. |
TDQS
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 the non-obvious behavior that the operation is rejected under referential dependency. It does not say whether deletion is reversible or what the refusal error looks like, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler; the scope qualifier is front-loaded and the failure condition is packed into a clause rather than a separate sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with full schema coverage and annotations covering the safety profile, this is largely complete. The only missing piece an agent could want is post-deletion state (recoverable or not, cascade effects).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both 'id' (site id) and 'component' (component id from list_components) are documented in the schema. The description adds no format, sourcing, or constraint 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('delete an unused component') plus a scoping qualifier ('HTML-first sites'), which cleanly separates it from rename_component, list_components and delete_page in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'refused while anything renders it' is an explicit precondition telling the agent when this call will fail, which is real usage guidance. It stops short of naming an alternative (e.g. detach/rewrite blocks first) or of saying how to confirm a component is unused before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageDelete pageADestructiveIdempotentInspect
Delete a page and its file. The last page can't be deleted; deleting home promotes the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| pageId | Yes | Page id, e.g. "page_about". |
TDQS
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 value the annotations cannot: the delete cascades to the backing file, deleting the home page promotes the next page, and the last page is blocked. Those are exactly the side effects and failure modes an agent needs before firing a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the destructive scope is front-loaded and the two edge cases follow. Every clause carries information that changes agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with destructiveHint declared and no output schema, the description covers scope, cascade, and the two blocked cases. Only the site-vs-page id relationship is left unaddressed, which is a minor gap against a fully documented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `id` (site id) and `pageId` are documented in-schema, and the 3 baseline applies. The description adds nothing about whether pageId is scoped per site or global, which is the one genuine ambiguity left given the optional site id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Delete a page and its file" gives a specific verb plus resource and even names the cascade (the file goes too). It is clearly distinguishable from delete_site, delete_component, and delete_collection_row by resource. There's no explicit sibling callout, but the resource noun does the disambiguating work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies one real "when not to use" condition (the last page can't be deleted) and notes the home-page special case. It does not point at alternatives such as unpublish_site or update_page for the cases where deletion is the wrong move, so guidance is implied 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.
delete_siteDelete siteCDestructiveIdempotentInspect
Delete a site. Requires an explicit id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id to delete. |
TDQS
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.
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.
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.
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.
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.
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.
delete_site_fileDelete site fileADestructiveIdempotentInspect
Delete a partial, section or other non-page file of an HTML-first site (pages: delete_page).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| path | Yes | ||
| baseVersion | No |
TDQS
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 nothing beyond that: it doesn't say whether deletion is permanent or recoverable, what happens if the path doesn't exist, or whether the site must be unpublished. With strong annotations this is acceptable but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler; the scope constraint and the sibling pointer are both front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with no output schema needs to tell the agent the path convention and the role of baseVersion, and it doesn't. Annotations cover reversibility/safety, so the definition is broadly usable but leaves real gaps for error-prone invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% – only `id` is documented ("Site id."); `path` and `baseVersion` are bare. The description says nothing about path format/relativity (site-root-relative?) or what baseVersion means for a delete (optimistic-concurrency token), which is exactly the information missing from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Delete") plus scoped resource ("partial, section or other non-page file") and it names the sibling it is not ("pages: delete_page"). An agent can distinguish this from delete_page/delete_site/delete_component 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes page deletions to delete_page, which is the main ambiguity risk among the delete_* siblings. It does not mention adjacent tools (read_site_file, edit_site_file, list_site_files) or any precondition such as the site needing to be selected/unpublished first.
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 (owner/agency) into a new site you own (content, title, description, portal, crawlPolicy). Domain and published state are not copied. The copy becomes active; the result has its editor link and previewUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Source site id. | |
| name | No | Slug for the copy. | |
| title | No | Title override. | |
| description | No | Description override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readonly, non-destructive, non-idempotent mutation; the description adds real context beyond that by listing copied fields, the excluded domain/published state, and that the copy is immediately active. It doesn't spell out that repeated calls create additional copies, but the 'becomes active' wording makes the create-new-resource effect clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences: copy scope first, exclusions second, resulting state and response third. No filler, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully reports what the result contains (editor link, previewUrl), and it covers both included and excluded fields of the copy. It omits error/permission conditions and idempotency implications, which keeps it just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so id, name, title and description are already documented in the schema, which sets the baseline at 3. The description reinforces that title/description are overrides on the copied values, but says nothing about the 'name' slug or that id is the source identifier beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Copy a site') and enumerates exactly what is copied (content, title, description, portal, crawlPolicy), which separates it from create_site or import_site. It stops short of naming those siblings, so the distinction is inferred from the verb 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The negative scoping ('Domain and published state are not copied') tells the agent what this tool will not do, which is useful guidance. However, there is no explicit statement of when to duplicate versus create a site, import a site, or pull a template, and no prerequisites (e.g., ownership of the source) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_site_fileEdit site fileADestructiveInspect
Change a site file by exact text: oldText once (or replaceAll) becomes newText, or newText goes insertAfter / insertBefore an anchor. Smallest span; keep data-edit-*. Linted on save; errors give the line, a missing oldText gets the closest match. The reply shows how stored text differs from what you sent. Stages in the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| path | Yes | ||
| edits | Yes | ||
| baseVersion | No | Version from read_site_file; refuses if the file changed since. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses useful behavior: exact text matching, replaceAll, insertAfter/insertBefore anchors, linting on save, line-numbered errors, closest-match feedback when oldText is missing, a diff-like reply, and draft staging. The remaining gap is minor given the annotation set already covers destructive and non-idempotent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core editing model. Most sentences earn their place, though the fragment 'Smallest span; keep data-edit-*' is cryptic and slightly reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive file-editing tool with no output schema, the description covers the important mechanics: matching, insertion, lint errors, near-miss feedback, reply behavior, and draft staging. It is complete enough to call correctly, though sibling routing guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description meaningfully compensates by explaining how oldText, replaceAll, newText, insertAfter, and insertBefore interact. It does not explain path or id semantics, but baseVersion is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: changing a site file by exact text. It distinguishes the exact-text editing mechanism and mentions replaceAll and insert anchor modes. It does not explicitly differentiate itself from sibling tools such as write_site_file or edit_site_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains edit modes but gives no explicit guidance on when to choose this tool over alternatives like write_site_file or edit_site_files. There are no when-not-to-use conditions or sibling routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_site_filesEdit several site filesADestructiveInspect
Edit several files as ONE atomic write: per entry a path plus edits (as edit_site_file), or text to create a file. A new pages/.liquid also creates its page, so a page plus its nav link is one call. All land or none. Linted on save. Stages in the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/non-idempotent/not-read-only, and the description adds genuinely new traits: all-or-nothing atomicity, lint-on-save rejection, draft staging rather than live publish, and implicit page creation for new pages files. It does not cover conflict/version failure behavior or what happens to unchanged files, so it's strong but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the atomic-write guarantee, then the entry model, then side effects and stage semantics in four dense sentences with no filler. Phrasing is telegraphic ('as edit_site_file', 'All land or none'), which is efficient but requires the agent to look up the sibling for edit-shape details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive batch mutation with no output schema, it covers the essentials an agent needs: atomicity, lint gate, draft staging, side-effect page creation, and the two entry modes. Return values aren't documented, but no output schema exists and the description's core behavioral risks are all disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema coverage, the description meaningfully compensates by explaining the entry model: path plus `edits` mirroring edit_site_file, or `text` for whole-file creation, plus the page-creation consequence for pages paths. It says nothing about `id`, `baseVersion`, `seo`, or `name`, though those carry schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: batch edit of several site files as ONE atomic write. It explicitly contrasts its per-entry modes (edits 'as edit_site_file', or `text` to create) and its implicit side effect (a new pages/<slug>.liquid also creates its page), which distinguishes it cleanly from edit_site_file and write_site_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Conveys when to prefer this over the singular sibling: multiple files that must move together, and the page-plus-nav-link scenario folded into one call. It stops short of stating explicit exclusions (e.g. 'use edit_site_file for a single file', 'use write_site_file for a full rewrite'), leaving the agent to infer single-vs-batch routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_iconFind iconARead-onlyIdempotentInspect
Search every icon set; returns ranked refs for the icon filter: {{ 'tb/TbPhone' | icon }}. Tabler (tb) lacks many brand logos; brands come from fa / si / … and appear in the results.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Keyword, e.g. "yelp", "shopping cart". | |
| set | No | Restrict to one set, e.g. "tb", "fa", "si". | |
| kind | No | brand = logo sets; ui = Tabler only. | |
| limit | No | Default 12, max 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so the description is free to add real value — it discloses the search scope (all sets), the ranked return shape, and a practical coverage limitation about brand logos in Tabler. It does not mention result count/pagination beyond the schema's limit default, but the coverage caveat is genuinely useful context an agent couldn't infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action and scope, with the caveat last. The embedded template snippet is slightly noisy but earns its place by showing the exact reference format the agent will receive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the return as ranked refs in a concrete format, and all four parameters are covered by the schema. What remains thin is guidance on result selection (ranking criteria, how many sets are searched), which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented with examples and an enum, giving a baseline of 3. The description's example ref 'tb/TbPhone' clarifies the set/name output format but adds little about the parameters themselves (q, set, kind, limit) beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (search) and resource (every icon set) and even describes the return value as ranked refs. It is clearly distinguishable from siblings like find_image and find_video by resource type, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the brand caveat ('Tabler lacks many brand logos; brands come from fa / si') steers the agent toward the right set/kind but never says when to choose find_icon over find_image or when to fall back to another tool. There are no explicit exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_imageFind imageBRead-onlyIdempotentInspect
Stock photos with verified, ready-to-use URLs (local bank, then Unsplash/Pexels).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keywords, e.g. 'bakery interior'. | |
| count | No | Default 3, max 6. | |
| category | No | hero/background = wide; avatar = faces; product = objects; team = groups. | |
| provider | No | Default pexels. | |
| orientation | No | Default landscape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description's job is to add context, and it does: the source precedence ('local bank, then Unsplash/Pexels') tells the agent that the local curated bank is tried first and that external providers are a fallback, and 'verified, ready-to-use URLs' signals results are hotlink-ready with no download step. It does not disclose failure behavior or attribution requirements, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause carries information. It is docked slightly because 'local bank' is an undefined internal term that leaves the reader guessing what that source is.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five optional params with full schema coverage and no output schema mean the description should at least sketch the return shape, and it does only minimally ('verified, ready-to-use URLs'). Missing are result shape/attribution obligations for Unsplash and Pexels, behavior when nothing matches, and any hint about how count interacts with the local bank fallback.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so enum and default semantics for q, count, category, provider and orientation are already fully documented. The description adds only one nuance beyond the schema — that a local bank is consulted before the selectable Unsplash/Pexels providers — which is useful but doesn't elaborate on any individual parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Stock photos') plus a quality claim ('verified, ready-to-use URLs'), which cleanly separates it from find_icon and find_video by resource type. It never names those siblings, so the differentiation is implicit 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence describes what the tool returns, not when to reach for it. There is no guidance on when to prefer find_image over find_video/find_icon, no prerequisite or preconditions, and no note about what to do when results are empty or the query is too vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_videoFind videoARead-onlyIdempotentInspect
Stock videos with direct MP4 URLs (Pexels) for tags.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keywords, e.g. 'coffee pouring'. | |
| count | No | Default 3, max 6. | |
| provider | No | Only pexels. | |
| maxDuration | No | Max seconds. | |
| minDuration | No | Min seconds. | |
| orientation | No | Orientation filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, open-world, and non-destructive. The description adds useful behavioral context about the provider and return format (direct MP4 URLs), but it does not mention licensing, attribution, rate limits, or any limitation on results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently communicates resource, return format, provider, and intended usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations that cover safety and external-world behavior, plus complete schema descriptions and no output schema, the description provides enough context to call the tool correctly. It states the return format as direct MP4 URLs, though it could note whether results include metadata or attribution requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all six parameters including query, count, provider, duration bounds, and orientation. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource (stock videos), the concrete return value (direct MP4 URLs), the provider (Pexels), and the intended use (<video> tags). It implicitly distinguishes from find_image by being about videos, but does not explicitly name that sibling or any other alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for <video> tags' gives an implied use case, so the agent can infer this is for obtaining stock video assets for HTML video elements. However, it does not explicitly say when to use this versus find_image or other resources, nor does it state exclusions.
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 classesARead-onlyIdempotentInspect
Canonical button class string (DaisyUI btn + spatial CTA classes) from intent (variant, shape, size), plus the responsive CTA modifier class names. A starting point; extra classes can be appended.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | Add CTA spacing / min-height (default true). | |
| size | No | sm | md | lg (default md). | |
| shape | No | e.g. rounded-box (default) or rounded-full. | |
| variant | No | primary | outline | ghost (default primary). | |
| emphasis | No | default | neon (primary only). | |
| responsive | No | Full width on mobile, auto on desktop (default true). | |
| extraClasses | No | Extra classes to append. | |
| includeModifiers | No | Also return activeModifiers (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds real context beyond them by disclosing what the return value consists of (base class string plus responsive modifier class names) and that it is intentionally partial — 'a starting point; extra classes can be appended.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding. The output artifact is front-loaded before the caveat about extensibility, which is the right ordering for an agent scanning for what it gets back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight optional parameters, a 100% documented schema, and no output schema, the description should describe the return shape — and it does, naming both the base string and the modifier class names. The only meaningful omission is the relationship to validate_button_classes, which would complete the workflow picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters with allowed values and defaults. The description references only the 'intent' trio (variant, shape, size) and the responsive modifiers, adding little beyond what the schema provides — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete artifact produced (a canonical DaisyUI 'btn' class string plus responsive CTA modifier names) and the inputs that drive it (variant, shape, size). That is specific enough to distinguish it from mutation-oriented siblings, though it never names the closely related validate_button_classes tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it is a class-string builder for button markup and can serve as a starting point with extra classes appended. There is no explicit when-to-use or when-not guidance, and no routing to or from validate_button_classes, which is the most likely confusion point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blockGet blockARead-onlyIdempotentInspect
Get a library block's Liquid by slug — a reference for writing your own section, not a default to place. Counts as a use.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Block slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent and non-destructive, so the bar is lower; the description adds real value by disclosing that the call 'Counts as a use', a metered/quota consequence not visible in structured fields. It also implies the return payload is Liquid source. No mention of failure behavior for unknown slugs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence plus a short usage caveat; every clause carries information (resource, key parameter, purpose, exclusion, billing implication). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully names what comes back (Liquid code) and what it is for. It does not address pagination, error cases, or whether site scoping via id changes resolution, which are the remaining gaps for a read tool of this kind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, slug) are already documented in the schema. The description only echoes that lookup is by slug and adds no format, scoping, or precedence guidance beyond it — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieves a library block's Liquid source by slug. It also disambiguates from template-application siblings by saying it is 'a reference for writing your own section, not a default to place', which immediately separates it from apply_kit_block-style tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent the intended use — inspect an existing block as a reference when authoring your own section — and warns against treating the result as something to drop in. It stops short of naming the alternative sibling to use for actual placement, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarGet calendarBRead-onlyIdempotentInspect
Booked and closed dates across a collection's homes for up to 62 days (claimId on owner-closed dates), plus dates that haven't reached the rental tool yet (pushId).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| to | Yes | YYYY-MM-DD, at most 62 days after from. | |
| from | Yes | YYYY-MM-DD. | |
| slug | Yes | Collection slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a read-only, idempotent, closed-world read, so the safety profile is covered. The description adds real domain context — that some dates exist upstream of the rental tool (pushId) and some are owner-closed (claimId) — but says nothing about pagination, empty windows, or what the response shape looks like, and there is no output schema to lean on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single sentence with no filler, which is good, but the compression is excessive: the parenthetical claimId/pushId clauses are cryptic to a reader who has not seen the response. Density is traded against comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with four required parameters and no output schema, the description should carry the return-value burden. It gestures at the important fields (claimId, pushId) and the window limit, but never explains the structure of returned dates per home, so an agent cannot predict the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the YYYY-MM-DD format and the 62-day bound. The description only obliquely implies slug identifies a collection ('a collection's homes') and adds no format or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource — booked and closed dates for a collection's homes — and distinguishes data provenance types (owner-closed dates carrying claimId vs. not-yet-pushed dates carrying pushId). It never states a verb and never names calendar siblings such as set_dates or share_calendar_link, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no routing to alternatives; an agent looking to change availability must infer on its own that set_dates (not this tool) is the mutation counterpart. The only implied context is the 62-day span limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionGet collectionARead-onlyIdempotentInspect
Read one collection's definition (schema fields, source, isPublic). A webhook-feed collection also shows its ingest URL and how to sign a POST; its secret is never printed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug (unique per site). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: webhook-feed collections additionally expose the ingest URL and POST-signing instructions, while the secret is never printed — an important disclosure about output sensitivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core read purpose front-loaded and the webhook caveat as a secondary clause. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully previews the returned fields and the conditional webhook payload. It does not cover lookup failure behavior (what happens on an unknown slug) or confirm site scoping, which a read-by-slug tool would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both id and slug documented in-schema, so the baseline is 3. The description says 'one collection' but does not clarify slug-vs-id selection or that only slug is required, adding nothing beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one collection's definition') and enumerates what comes back (schema fields, source, isPublic). A single-collection read is clearly distinguished from list_collections and update_collection_schema in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'one collection' framing implies this is the single-item read rather than the list, but no sibling is named and no condition (e.g., 'after list_collections to inspect a schema') is given. Usage is inferable but never stated.
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 statusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| check | No | Candidate domain to preflight. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so safety is covered. The description still adds value by disclosing that the read returns live external state (apex/www Vercel state, exact DNS records), implying a network-dependent, open-world response, and that the `check` mode is non-mutating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and the returned fields, then the one notable mode. Nothing is wasted or repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's enumeration of returned data (redirect mode, apex/www state, DNS records) is what makes the return value legible, and the `check` mode is explained. What's missing is disambiguation from the domain-related siblings, which matters given how many exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both `id` and `check` are already documented, and the description's note that `check` preflights 'without changes' mostly restates the schema's 'Candidate domain to preflight.' It adds a small amount of meaning but the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (read) and resource (custom domain) and enumerates exactly what is returned: redirect mode, apex/www Vercel state, and DNS records. It stops short of naming the sibling tools (check_domain, set_domain, clear_domain) that an agent would otherwise confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a clear condition for the `check` parameter (preflighting a different domain without changes), which is a real usage hint. But there is no guidance on when to call this versus check_domain, set_domain, or clear_domain, and no stated prerequisites such as a selected site id.
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 statusARead-onlyIdempotentInspect
Progress of an import_site run: status, page and media counts, warnings, redirects from the old page addresses, and the pages a plan's page limit left out with the next step to bring them in. When status is ready it includes the new site id, editor link and the site's previewUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| importId | Yes | From import_site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the description's job is to add meaning, and it does: it discloses that warnings, redirect origins, and page-limit omissions appear in the result, and that the 'ready' state carries the new site id, editor link and previewUrl. It omits the status lifecycle (what states exist, which are terminal), which is the one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The field inventory is front-loaded and the 'when ready' enrichment is correctly placed second as the payoff case. Every clause maps to something an agent would actually act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description legitimately carries the return-value burden, and it does so well: counts, warnings, redirects, omissions with next step, and the ready-state payload. For a read-only status tool with full annotation coverage this is close to complete; only the status enumeration is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter at 100% schema coverage, with the schema itself saying 'From import_site.' The description corroborates the origin by naming the import_site run but adds no format, length, or lifecycle detail beyond what the schema field already states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource precisely ('Progress of an import_site run') and enumerates what that progress contains: status, page and media counts, warnings, redirects, omitted pages. That ties it clearly to the import_site sibling rather than any list/get tool. The verb itself is only implied ('Progress of'), which keeps it from a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The reference to 'an import_site run' and the 'next step to bring them in' implies this is polled after import_site to close the loop, but there is no explicit when-to-use statement, no polling cadence, and no guidance on what to do with a non-ready status. 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_orderGet orderBRead-onlyIdempotentInspect
One order in full: items, shipping, cancellation terms, balance, deposit hold, signed agreement, the buyer's answers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| orderId | Yes | From list_orders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. Because there is no output schema, the description carries the return-payload burden and does so by naming the concrete contents (items, shipping, cancellation terms, balance, deposit hold, signed agreement, buyer answers), which tells the agent to expect commercially sensitive and PII-bearing data and to size its response handling accordingly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, and the highest-value information (that this returns the full record, not a summary) is front-loaded. It is a fragment rather than a sentence, which costs a little clarity but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full annotations and no output schema, the field enumeration covers most of what an agent needs to know about the response. What remains missing is the relational context: when to prefer this over list_orders or update_order, and any notion of access limits on the sensitive fields it promises to return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (site id and orderId) are already documented, including the cross-reference to list_orders. The description adds nothing about parameters, so the baseline 3 applies; the schema does the work, not the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun fragment naming the resource ('One order in full') and enumerating its contents, but never states the verb or scope explicitly. The title and the enumeration make retrieval of a single order inferable, and 'one' contrasts implicitly with the sibling list_orders, yet the differentiation is left to inference 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative. An agent must infer from the name and from the list_orders sibling that this is the single-record follow-up to a listing call; the only routing hint ('From list_orders') 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.
get_portalGet portalARead-onlyIdempotentInspect
Fetch the current portal configuration for a site.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds little behavioral context beyond saying it fetches the current configuration; it does not clarify whether a default site is used or what the returned configuration contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The key action and scope appear immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with rich annotations and fully documented schema, the description is largely sufficient. The only minor gaps are the optional 'id' behavior and a brief indication of what 'portal configuration' includes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'id' parameter is documented as 'Site id.' The description reinforces that the portal belongs to a site but does not clarify that 'id' is optional in the schema or what happens if it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: fetch the current portal configuration, scoped to a site. It distinguishes itself from set_portal and remove_portal by the read verb, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only fetch phrasing and the existence of set_portal/remove_portal siblings, but the description does not state when to use this versus those alternatives or mention prerequisites.
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 chatARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description still adds genuinely new behavioral context — that AI credit status is included and that no credits causes the visitor-facing bubble to be hidden — which explains a state an agent would otherwise misread as a configuration bug. It stops short of covering behavior when chat is unconfigured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the field enumeration reads as a compact manifest of the return payload, which is doing real work rather than padding. Every clause maps to something the caller gets back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description shoulders the burden of describing the return payload, and it does so item by item while also flagging the credits/bubble dependency. It does not cover the empty or unconfigured case, which is the main remaining gap for a getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and the schema documents it fully ('Site id.'), so the 100% coverage baseline of 3 applies. The description refers to 'the site's' settings but adds no detail on how a site is identified or what happens when id is omitted (it is not required).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (site chat bot settings), then enumerates exactly which settings are returned: on/off, assistant name, greeting, owner instructions, lead capture fields, lead destination, and AI credit status. That enumeration makes it unmistakable against the sibling mutator set_site_chat and against unrelated getters like get_site_email.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-vs-write distinction from set_site_chat is implied by the verb 'Read' and the tool name pairing, but the description never says when to call this versus set_site_chat or other site getters, nor does it state prerequisites such as a required site id or selection state. 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 emailBRead-onlyIdempotentInspect
One site email: subject, preheader, Liquid source (emails/.liquid or default), objects ({{ order.total }}…), parts (keep required ones). Simple blocks (div, p, h1-h3, a, img) with Tailwind; no forms, buttons, video or data-. A link with bg- is a button.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| kind | Yes | See list_site_emails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds substantial behavioral context about the returned email: it lists the fields (subject, preheader, Liquid source, objects, parts), specifies allowed HTML blocks (div, p, h1-h3, a, img with Tailwind), and forbids forms, buttons, video, and data-* attributes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and jargon-heavy, packed into three sentences with no clear front-loading of the core action. The opening fragment 'One site email:' is not a proper lead, and details about Liquid syntax and block restrictions dominate, though the length is not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple getter with two parameters, full schema coverage, and no output schema, the description provides rich context about the email's content structure, allowed elements, and restrictions. It does not explicitly state the return is a single email object, but enough detail is given for an agent to understand what will be retrieved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description adds meaningful semantics for the `kind` parameter by explaining that it maps to a Liquid file path (emails/<kind>.liquid) with a default fallback. It doesn't clarify the `id` parameter beyond the schema's 'Site id.', but the extra detail on `kind` justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'One site email:' followed by a list of components, but never states the action (e.g., 'Retrieve'). It implies the tool returns an email template, but the missing verb makes the purpose vague and requires the tool name to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool instead of siblings like list_site_emails or preview_site_email. The description focuses entirely on the email's internal structure and content restrictions, not on selection criteria or prerequisites.
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 referenceARead-onlyIdempotentInspect
Styling and authoring reference. No topic: palette variables, styleGuide tokens, spatial scale, class rules, section skeleton. Pass topic for a focused guide: liquid (files, tags, filters, runtime data-* attributes, site JavaScript, forms, dates), design, accessibility, domains, blocks, editing, theme, pages, site, media, integrations, animation, collections, members, downloads, chat, redirects, emails; liquid-<lists|state|interactions|motion|forms|maps|data|sections>: one part of the liquid reference.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Return one guide instead of the core reference. |
TDQS
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 the safety profile is fully covered. The description adds useful content-scope context about what each mode returns, but says nothing about response size, format, or whether guides are static vs. site-specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The default no-topic behavior is correctly front-loaded, but the long enumeration of eighteen self-descriptive topic names (domains, blocks, editing, theme, pages, site) largely restates the enum without adding meaning, inflating the sentence considerably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional enum parameter, full schema coverage, and annotations covering the safety profile, the description provides everything needed to invoke the tool correctly. The absence of an output schema means return values could have been described, but the topic enumeration implicitly covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum already lists all 26 values, so the baseline is 3. The description earns more by explaining what the liquid topics actually cover (files, tags, filters, runtime data-* attributes, forms, dates) and by decomposing the liquid-<part> suffix pattern, which the enum names alone do not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource clearly as a 'styling and authoring reference' and enumerates what content is returned for each topic, so an agent knows this is a documentation lookup rather than a mutation. It does not name a sibling it is distinct from (e.g. set_theme, suggest_palettes), but the purpose is unambiguous on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly covers the two invocation modes: no `topic` returns the core reference (palette variables, styleGuide tokens, spatial scale, class rules, section skeleton), and passing `topic` returns a focused guide. There is no guidance on when to prefer this over related tools like set_theme or suggest_palettes, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_collection_csvImport collection CSVADestructiveInspect
Import rows from CSV text or an uploaded CSV/TSV/XLSX file (exactly one of csv | mediaId); 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| csv | No | CSV text with a header row. | |
| mode | No | Merge mode. Default append. | |
| slug | Yes | Collection slug. | |
| mediaId | No | An uploaded CSV/TSV/XLSX file's mediaId (the agent gets this for attached files). Use this instead of csv when the data was uploaded — never retype rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: replace deletes existing rows first, upsert matches on an externalId/id column, header/field matching rules, an ~8MB size cap, and that the operation is plan-gated. These disclosures (destructive replace semantics, cap, entitlement) go well past destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, front-loaded with the input-source rule and mode behavior. Every clause carries information, though the semicolon-packed style is slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no output schema and full annotation coverage, the description covers inputs, modes, limits, and entitlement. It omits what the call returns (e.g. imported-row counts) and pagination/status behavior, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns above that by explaining mode behaviors (append default, replace deletes first, upsert keyed by externalId/id), header-key matching with unmatched ignored, and the 8MB cap — genuine meaning beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Import) and resource (rows into a collection from CSV/TSV/XLSX), and is clearly distinguishable from siblings like create_collection_rows or import_site. An agent immediately knows this bulk-imports tabular data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear selection rule between the two input sources ('exactly one of csv | mediaId') and explains mode semantics. It doesn't explicitly route to alternative sibling tools (e.g. single-row creation), but the when-to-use context is strong.
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 (pages, CSS, JS, images) into a NEW editable 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); restOf (an importId) brings the pages a plan's page limit left out into that import's same site, after an upgrade. Returns an importId for get_import_status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Site name (default: home page title). | |
| size | No | Exact zip size in bytes → returns an upload URL. | |
| files | No | Inline files: path relative to the site root. | |
| pages | No | Archive paths of the pages to import (e.g. about.html), when the plan's page limit can't take them all. The home page is always included; the limit still applies, in this order. | |
| restOf | No | importId of a capped import: adds the pages it left out to that same site. Needs a plan that takes more pages (get_import_status says when). | |
| uploadKey | No | From the size step, after the PUT succeeded → starts the import. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=true, idempotent=false); the description adds what the annotations cannot: that the result is a draft site, the upload-then-import sequencing, and that an importId is returned for get_import_status. It omits auth/plan prerequisites other than the indirect 'a plan's page limit' mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and then densely enumerates each input mode; almost no wasted words. It is slightly over-compressed — the semicolon-chained clauses take effort to parse and some qualifiers ('local server only') are easy to miss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, all-optional tool with no output schema, the description covers every mode of invocation, the inline size cap, the page-limit/upgrade path, and what is returned. An agent has enough to choose the right parameter and chain the calls to get_import_status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema baseline is 3; the description exceeds it by explaining the relational semantics the schema can't express — that size returns an uploadKey, that uploadKey must follow a successful PUT, that restOf targets an existing importId, and that filePath is local-server only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Turn a static HTML site (pages, CSS, JS, images) into a NEW editable PageHub site draft.' The asset types and the 'NEW draft' outcome distinguish it from create_site and edit_site_file without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It spells out the multi-step workflow per parameter: size returns an upload URL and uploadKey, uploadKey after the PUT starts the import, files sends text inline (≤3MB), restOf reuses an importId after an upgrade. This is strong conditional guidance, though it never states when to prefer this over create_site or 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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| role | No | Default editor. | |
| Yes | Email to invite. |
TDQS
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.
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.
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.
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.
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.
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_appsList appsBRead-onlyIdempotentInspect
Apps that fill a collection: rental tools (Hospitable, Hostaway, Guesty), calendar links (Airbnb, Vrbo, Booking.com, Google, Outlook, Apple), feeds and shops (RSS, Notion, Shopify, Square…), Airtable. Shows what each needs (secret keys marked), whether the plan has it, what's connected with its last sync, and calendar links (feedId).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real value beyond that by disclosing the return payload: required secret keys per app, plan entitlement, current connection state with last sync, and calendar feedId. No output schema exists, so this return-shape disclosure is the only source of that information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single sentence with no padding, but it is front-loaded with brand-name enumeration (Hospitable, Hostaway, Guesty, Airbnb, Vrbo...) rather than the core action. The most decision-relevant information — plan availability, connection status, feedId — is buried at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool, the description covers the important unknown (what the rows contain) in useful detail, which compensates for the absent output schema. The remaining gap is that the 'id' parameter's site scoping and the list/array return nature are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required 'id' (documented as 'Site id.'), so the schema carries the burden. The description adds nothing about what the id scopes — it never says the listing is per-site, which is the one piece of meaning the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates what kinds of apps exist (rental tools, calendar links, feeds/shops, Airtable) and what the response reveals, so an agent can infer this is a catalog of available integrations. But it never states a verb or object directly — 'Apps that fill a collection' is a fragment, not a statement that the tool lists available apps for a site. It is distinguishable from connect_app/set_integrations by its inventory framing, but only by inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no named alternative. The mention of 'what each needs (secret keys marked), whether the plan has it' hints at a pre-connection discovery step, but the agent must guess that this is the tool to call before connect_app or set_integrations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_blocksList blocksARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| style | No | One vibe; auto-set from the site's buildStyle. | |
| styles | No | OR-filter by several vibes. | |
| category | No | One category (merged with categories). | |
| categories | No | OR-filter by several categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's job is to add context — and it does: the ~200 item cap, category grouping, and the returned field set. It does not discuss whether results are cached or how the cap is enforced, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler, and the scoping/alternative information is front-loaded ahead of the filter note. Nothing is repeated needlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter filter tool with full annotation coverage and no output schema, the description is nearly sufficient — it names the returned fields and the result cap. Minor gap: it doesn't address how `id` (site id) interacts with the read, which the schema alone carries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The line about `categories` / `styles` arrays OR-matching largely restates the schema's own "OR-filter by several" descriptions, adding emphasis rather than new semantics; the singular-vs-plural merge behavior is also already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list library blocks), the scope (~200 items, grouped by category), and the fields returned (slug, name, tags). It also names the sibling it differs from, search_blocks, so an agent can distinguish the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"A broad menu; search_blocks ranks and filters" gives an explicit alternative plus the condition that selects it. It stops short of an explicit when-not statement (e.g., avoid when you already know the target block), but the routing signal is clear.
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 rowsARead-onlyIdempotentInspect
Page through a collection's rows: rows, nextCursor, hasMore, totalCount.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug. | |
| limit | No | Default 50, max 200. | |
| cursor | No | nextCursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. With no output schema, the description earns real credit by disclosing the pagination contract and the four response keys (rows, nextCursor, hasMore, totalCount), which the agent could not otherwise know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded fragment with zero filler; every token (the verb and the four response keys) carries information. It leans toward under-specification rather than verbosity, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 4-parameter read tool with full schema coverage and rich annotations, and the return-shape disclosure compensates for the missing output schema. It still omits the pagination loop semantics (iterate while hasMore, feed nextCursor back) and any note on ordering or empty results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — slug, id, limit (default 50, max 200) and cursor ("nextCursor from the previous page") are all documented in the schema. The description adds nothing beyond that, so this sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("page through") and resource ("a collection's rows"), which separates it from list_collections (collections, not rows) and from create_collection_rows / update_collection_row (writes). It never names a sibling explicitly, so differentiation is inferential 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: "page through" plus the mention of nextCursor/hasMore signals an iterative read, but there is no statement of when to prefer this over get_collection or the row-creation siblings, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList collectionsARead-onlyIdempotentInspect
List the site's collections (headless CMS): id, name, slug, row and field counts, public flag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful return-shape context by naming the fields returned, though it does not mention pagination, limits, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficiently structured sentence with the resource and returned fields front-loaded. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, annotations cover the safety profile, schema covers the single parameter, and the description covers the returned fields. No output schema is present, but the description sufficiently explains what is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter, and schema description coverage is 100%, with the schema already saying 'Site id.' The description only implies site scoping and adds no extra syntax or format meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the site's collections'. It enumerates the returned fields (id, name, slug, row/field counts, public flag), which clearly distinguishes it from get_collection and list_collection_rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'List' and by the site-scoped collections resource, but there is no explicit when/when-not guidance. It also does not name alternatives such as get_collection for a single collection or list_collection_rows for rows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsList componentsCRead-onlyIdempotentInspect
HTML-first sites: reusable components (partials) and where each renders.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful conceptual context about partials and render locations, but says nothing about pagination, auth, or the shape of results beyond render locations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded fragment with no wasted words. It is efficient for a simple list tool, though its terseness contributes to the missing action verb and usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with rich annotations and a simple schema, the description is minimally adequate. However, with no output schema, it could do more to explain what the returned 'where each renders' data looks like and whether a site id is needed to scope results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'id' parameter is fully described in the schema as 'Site id.', so schema coverage is 100%. The description adds no parameter-specific meaning, which is acceptable under high schema coverage but not above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as reusable components (partials) and adds that it shows where each renders, which goes beyond the name. However, it never states the verb 'list' and reads as a fragment, leaving the action 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.
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 versus list_pages, list_site_files, or other list tools, and no prerequisites or site-context requirements are mentioned. The 'HTML-first sites' phrase hints at a domain constraint but does not route the agent to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_downloadsList downloadsBRead-onlyIdempotentInspect
Site's hosted downloads: link, versions (★ = served), download count, plan allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
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.
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.
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.
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.
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.
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_form_submissionsList form submissionsARead-onlyIdempotentInspect
The site's form inbox (visitor answers), newest first: form, page, state, unread, answers, and each submission's webhook delivery (delivered / retrying / FAILED + HTTP status). With submissionId: one in full, with how the visitor arrived and its notes. Filter by state (default open), formName, q. Reading doesn't mark it read.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Text anywhere in the answers. | |
| id | No | Site id. | |
| limit | No | Max 100, default 50. | |
| state | No | open (default), done, archived or spam. | |
| cursor | No | nextCursor of the previous page. | |
| formName | No | Only this form. | |
| submissionId | No | Read one submission. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses useful behavior: results are newest first, reading does not mark items read, webhook delivery states are included, and submissionId returns a richer single record with arrival context and notes. These details go well beyond what the annotations and schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it leads with the resource and ordering, then explains the single-record mode, filters, and the read side effect. The field list and webhook-status detail are dense but directly useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the key return shape and ordering, plus the special single-submission behavior and read side effect. Pagination details are left to the schema's cursor/limit fields, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by grouping the filters, restating the open default, and explaining that submissionId switches to a full single-submission view. It does not explain limit/cursor/id, but the schema already documents those adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource — the site's form inbox of visitor answers — and specifies ordering, returned fields, and the single-submission mode. It is clearly distinguishable from sibling tools such as list_form_webhooks, even though it mentions webhook delivery status as part of each submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the main usage modes: list with optional state/formName/q filters, defaulting to open, or fetch one full submission via submissionId. It also notes that reading does not mark submissions read. It does not explicitly name alternatives or when not to use it, but the operational context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_form_webhooksList form webhooksARead-onlyIdempotentInspect
The webhook URLs the forms on the PUBLISHED site post to (a {% form webhook: 'https://…' %} tag, live after publish_site), the forms using each, and whether each has a signing secret. Returns the endpoint key set_form_webhook_secret takes. Owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new behavioral facts: results are scoped to the PUBLISHED site (unpublished tags don't appear) and access is restricted to owners. It doesn't describe ordering or pagination, but with no output schema that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact passage with no filler, and the core definition is front-loaded. It is somewhat overloaded, packing three claims plus a parenthetical example into one sentence, which taxes readability slightly, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing results and does so: the endpoint URLs, which forms use each, and whether each has a secret. Combined with the owner-only rule and the publish dependency, an agent has enough to call it correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single `id` parameter ('Site id.'), so the baseline is 3. The description implies the site scope ('the forms on the PUBLISHED site') but does not clarify that `id` is optional or which site is used when omitted — the one bit of added meaning it could have supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb+resource ('the webhook URLs the forms on the PUBLISHED site post to') and enumerates the returned fields (forms using each, signing-secret status). It distinguishes itself from set_form_webhook_secret by noting it returns the `endpoint` key that setter consumes. It stops short of explicitly naming a sibling it replaces, but no direct list-alternative exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete use context: inspect webhooks that go live after publish_site, and obtain the `endpoint` value before calling set_form_webhook_secret — an explicit chaining hint. It adds an eligibility rule ('Owners only'). It does not state when-not to use it, but the tool space is narrow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersList membersBRead-onlyIdempotentInspect
Site customers with their plans, status and expiry. Filter by plan, status, q; paged.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Email or name. | |
| id | No | Site id. | |
| plan | No | Plan slug. | |
| cursor | No | nextCursor from the last page. | |
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description contributes the pagination trait ('paged') and the returned fields, but says nothing about authorisation, scoping to a site, page size, or how the cursor behaves beyond the schema's own wording.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses, front-loaded with what the tool returns followed by the filtering capability — zero padding. It is slightly too telegraphic, dropping the leading verb and an article, which costs a little readability without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five optional parameters, no required fields and no output schema, the description carries more burden than it discharges: it gives a partial return-value summary and mentions paging, but never resolves which site is being listed when id is omitted, nor how results are ordered. Adequate for a simple list endpoint, but the ambiguity against list_site_members is unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, which sets the baseline at 3. The description names three of the five parameters (plan, status, q) but adds no semantics beyond the schema, and the two it omits (id, cursor) are only obliquely hinted at by 'paged'. The enum for status is undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource and its payload clearly ('Site customers with their plans, status and expiry'), which tells an agent exactly what comes back. However it omits an explicit verb and, critically, does not differentiate itself from the near-duplicate sibling list_site_members, leaving the agent to guess which of the two list tools is intended.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Filter by plan, status, q; paged' implies how to narrow results, which is a form of usage guidance. But there is no when-to-use vs when-not, no mention of the alternatives (list_site_members, list_membership_plans), and no prerequisite such as needing a site id or selecting a site first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membership_plansList membership plansBRead-onlyIdempotentInspect
Site's membership plans: slug, prices, access length, flags.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds only the returned field list, with no note on pagination, ordering, auth scope, or whether an unset site id falls back to a selected site.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact fragment with zero filler, front-loading the resource before the returned fields. It is arguably clipped to the point of being a noun phrase rather than a sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with annotations covering safety this is nearly sufficient, and the absent output schema is partially compensated by the field enumeration. However, with id optional (0 required parameters) the description never explains which site is used by default, a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the single 'id' parameter is documented as 'Site id.'), so the schema carries parameter meaning and baseline 3 applies. The description adds no format or defaulting detail for the optional id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (site membership plans) and enumerates the returned attributes (slug, prices, access length, flags), so the agent knows exactly what this call yields. It does not explicitly contrast with set_membership_plan or other plan-related siblings, but the list-vs-set distinction is carried by the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives such as list_site_members or set_membership_plan, and no prerequisite or context guidance. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersList ordersBRead-onlyIdempotentInspect
The site's orders and bookings from its own Stripe account, newest first: buyer, paid, refunds, booking, balance, deposit hold, agreement, shipping.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| No | Only this buyer's orders. | ||
| cursor | No | From the last page's More line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real context beyond them: results are ordered newest first and are drawn from the site's own Stripe account. It omits pagination behavior even though a cursor parameter exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact line with no filler, which is good, but it is a fragment with a colon-led noun list whose status is ambiguous — an agent cannot tell whether 'buyer, paid, refunds...' are returned fields, filters, or order types. The ordering fact is front-loaded well; the trailing list is not self-explanatory.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of conveying return shape, and its field list gestures at that only cryptically. Pagination via the cursor parameter and the effect of the email filter are left entirely unexplained, which leaves gaps for a list tool that may span many pages.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the id, email and cursor parameters are already documented in the schema, and the description adds nothing about them. The trailing field list (buyer, paid, refunds, booking, balance, deposit hold, agreement, shipping) appears to describe returned record contents rather than input parameters, so it does not deepen parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (orders and bookings), the scope (a given site, from its own Stripe account) and the ordering (newest first), which is enough to distinguish it from the singular get_order and update_order siblings. It is written as a sentence fragment rather than a verb-led statement, and it never names the sibling it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to prefer this over get_order for a single record, nor when to apply the email filter versus listing everything. The only usable routing cue is the implicit list-vs-get naming convention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList pagesARead-onlyIdempotentInspect
List the site's pages: id, name, url, file, home/404 flags. Use it to get page ids. With pageId: that page's access policy (password set?, access conditions, deny action), body class and theme overrides.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| pageId | No | Show one page's settings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the response shape field-by-field (necessary since there is no output schema) and by revealing that pageId switches the tool from a list into a single-page settings read — a behavioral nuance the annotations do not capture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the list behavior and its return fields, then the alternate mode. 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.
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 returned in each mode. A minor gap remains: it does not state that both parameters are optional or what happens when id is omitted (default/selected site), which matters for a zero-required-parameter tool whose scope otherwise depends on ambient state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description exceeds the baseline: it tells the agent that pageId is not a filter but a mode switch that changes the returned payload from page summaries to access policy/theme override details, which the schema's terse 'Show one page's settings' does not make clear. The id parameter's scoping is implied only through 'the site's pages'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the site's pages') and enumerates the returned fields (id, name, url, file, home/404 flags), plus the second mode where pageId yields access policy, body class and theme overrides. It does not explicitly differentiate from close siblings like outline_page or update_page, so it is clear but not sibling-routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to get page ids' gives an explicit invocation context for the no-argument case, which is the primary workflow (list, then act on an id). The pageId mode is described by its output rather than by when to prefer it over update_page or outline_page, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsList presetsARead-onlyIdempotentInspect
Curated theme presets (palette + fonts + tokens). compact: true returns id + name only. set_theme({ preset }) applies one.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | Mood filter, e.g. "warm", "dark", "medical". | |
| brief | No | Alias for compact. | |
| compact | No | Id + name only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully structured and the description need not repeat it. The description adds the compact-mode return shape and the linkage to set_theme, but says nothing about mood-filter behavior or whether results are ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact fragments, front-loaded with the resource definition before the parameter and follow-up hints. No filler, though the telegraphic style (e.g., 'set_theme({ preset }) applies one') leans on the agent parsing notation rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lister with no output schema, the description adequately covers what a full preset contains and what compact mode trims. It is slightly incomplete on the mood parameter's semantics and non-compact return payload, but nothing critical blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents mood, brief, and compact. The description restates compact's effect ('id + name only') without adding anything the schema lacks, and never clarifies the mood filter or the brief/compact aliasing relationship.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (curated theme presets) and defines their contents (palette + fonts + tokens), so the agent knows exactly what is returned. It also points at the applying sibling set_theme, which helps differentiate this read tool from the mutation. It stops short of a fully explicit 'list' verb, letting the tool name carry that.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of set_theme({ preset }) implies the workflow (fetch a preset, then apply it), but there is no explicit when/when-not guidance. It does not distinguish the tool from plausible alternatives like suggest_palettes, suggest_font_pairings, or list_templates, leaving the agent to infer which preset source to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_promo_codesList promo codesBRead-onlyIdempotentInspect
The site's promo codes from its own Stripe account: code, percent or amount off, uses, end date, on or off.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | Yes | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description's contribution is the scope note that codes come from the site's own connected Stripe account, plus 'on or off' implying both active and inactive codes are returned. It omits ordering, pagination, and empty-state or disconnected-Stripe behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the resource and its source before the field list. Nothing extraneous, though the terse fragment style slightly reduces readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter and no output schema, enumerating the returned fields is genuinely helpful and largely fills the gap. However, a list operation with an external dependency (Stripe) should at least note what happens when the account is not connected or when no codes exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single required siteId parameter, so baseline is 3. The description only refers to 'the site's' codes and adds no format, default, or scoping detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (promo codes) with a clear scope (the site's own Stripe account) and enumerates the fields returned, so an agent knows exactly what it is retrieving. It does not explicitly contrast with the sibling set_promo_code, but the list-vs-set distinction is obvious from the verb and title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of a prerequisite Stripe connection requirement (only an oblique 'from its own Stripe account'), and no named alternative such as stripe_get_product or set_promo_code. The usage is only inferable from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_review_threadsList review commentsARead-onlyIdempotentInspect
Client review comments on the site: each pinned to a spot on the preview (the quoted text says where), with the conversation, author and status; counts of open/resolved. Filter by status or pageSlug. Clients leave them on the review link made in the dashboard's Review screen.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| page | No | Page, from 1. | |
| status | No | open, resolved or closed. Default all. | |
| pageSlug | No | One page's slug; "" is the home page. Default every page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-openWorld, so the safety profile is covered. The description does add genuine value by describing the returned content shape (pin location, quoted text, conversation, author, status, open/resolved counts), but it omits paging behavior even though a `page` parameter exists, which is the main behavioral unknown left.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return shape is front-loaded in the first clause, with filtering and origin context after — good ordering. The final sentence about clients leaving comments on the dashboard review link is useful orientation, though the sentence structure is crowded and could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with all four optional params fully documented in schema, the description supplies what the schema cannot: what a thread actually contains and what the counts mean. The missing piece is pagination/sort behavior, which matters because a `page` param exists and there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents id, page, status and pageSlug — baseline 3. The description goes slightly beyond by tying the two filters to intent ("Filter by status or pageSlug") and explaining that the quoted text encodes the pin location, which helps interpret results per pageSlug.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific resource (client review comments on a site) and its structure — pinned to a spot on the preview, with quoted text, conversation, author, status, plus open/resolved counts. That is far more precise than a tautology. It stops short of naming the sibling it pairs with (reply_review_thread review for responding), so it doesn't fully differentiate from its one close relative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives filter usage ("Filter by status or pageSlug") and contextualizes where the data originates (the review link from the dashboard's Review screen). However, it never says when to call this versus reply_review_thread, nor does it state prerequisites such as needing a site id or an existing review link. Usage is implied rather than prescribed.
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 emailsCRead-onlyIdempotentInspect
Transactional emails: customized or default, whether each sends.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only a vague hint about entry contents and says nothing about scope (one site vs all sites), pagination, or ordering — minimal added value beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is very short with no wasted words, but it is under-specified rather than genuinely concise: the phrase is not front-loaded with an action and reads as a fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool this could be adequate, but the description fails to resolve the key ambiguities an agent faces: that 'id' is optional, and whether the call returns emails for one site or across sites. With no output schema, that gap goes unfilled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single documented 'id' parameter, so the schema carries parameter meaning. The description adds nothing about the id, and notably never explains that it is optional or what omission means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun-phrase fragment ('Transactional emails: customized or default, whether each sends') that never states a verb or that it enumerates them; the operation is only inferable from the tool name. It adds detail about what each entry contains, but that is closer to restating the name than declaring a distinct action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus sibling tools such as get_site_email (single email), preview_site_email, or update_site_email. No prerequisites, no exclusions, and no indication of what happens when the optional site id is omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_site_filesList site filesCRead-onlyIdempotentInspect
HTML-first sites (format: html): every draft file (pages/.liquid, partials/, sections/, theme.css, site.json, emails/, assets/.js) and which page each serves. Format: get_style_reference({ topic: "liquid" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| glob | No | Only paths matching, e.g. partials/*.liquid or **/*.css. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description does add real value beyond them: it scopes results to DRAFT files and notes that each file's serving page is reported, which shapes how an agent reads the output. It stops short of pagination, ordering, or what is returned for non-HTML site formats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but the second sentence ('Format: get_style_reference({ topic: "liquid" })') reads as leaked or misfiled boilerplate that does not describe this tool and actively confuses the reader. The useful content is buried in a parenthetical conditional ('format: html') that leads the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what comes back — it partially does ('every draft file ... and which page each serves'). However, for a tool with 0 required params and a site-format conditional, the description never resolves what is returned for non-HTML sites or how a caller should pick a site id. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both id and glob are already documented in the schema, making 3 the baseline. The path examples in the description ('partials/*.liquid', 'assets/*.js') illustrate the file universe but do not clarify glob syntax or default behavior beyond what the schema says. No added semantic value over the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource — draft site files (pages/*.liquid, partials/, sections/, theme.css, site.json, emails/, assets/*.js) — and a notable output trait ('which page each serves'). But the verb is only implied via the name, and the scope is gated on 'HTML-first sites (format: html)' with no statement of what happens for other site formats. It does not differentiate itself from search_site_files, read_site_file, or list_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use instruction is given. The closest thing to guidance is the trailing 'Format: get_style_reference({ topic: "liquid" })', which points at a different tool rather than explaining when to choose list_site_files over search_site_files or read_site_file. An agent must infer the routing from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_site_historyList site historyARead-onlyIdempotentInspect
The site's version history, newest first: id, version, save/publish/restore, who (and via mcp/ai/editor), +added -removed ~changed, restorable. With revisionId: what changed in that version, file by file with line diffs (diff 'prev' = against the one before; path = one file in full). Read this before restore_site_revision.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| diff | No | With revisionId: 'prev' (default) or another revision id to compare against. | |
| page | No | List page, from 1. | |
| path | No | With revisionId: only this file's diff, in full. | |
| pageSize | No | Rows per page, max 100. | |
| revisionId | No | A revision id from the list: show what changed in it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real value beyond that: result ordering, the fact that each entry reports its provenance (mcp/ai/editor) and whether it is restorable, and that revisionId switches to a diff view rather than a list view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tight and front-loaded: the primary list mode comes first, the revisionId mode second, and the prerequisite pointer to restore_site_revision last. The telegraphed shorthand ('+added -removed ~changed') is efficient but borders on cryptic for an unfamiliar agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned fields and describing what diff output looks like. Combined with full schema coverage for the six parameters and annotations covering safety, an agent has everything needed to call it correctly in either mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented, which sets the baseline at 3. The description mainly restates schema content (diff 'prev', path = one file in full); its only genuine addition is framing revisionId as a mode switch, which is useful but modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: version history of a site, newest first, with an explicit list of returned fields (id, version, action type, actor/provenance, add/remove/change counts, restorability). It also cleanly describes a second mode triggered by revisionId (per-file diffs), so an agent can distinguish it from sibling list tools like list_pages or list_site_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to read history before calling restore_site_revision, and explains the conditional usage of revisionId, diff and path. It lacks an explicit 'when not to use' or a contrast with other listing tools, so it falls just short of the top band.
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 membersARead-onlyIdempotentInspect
List a site's members with roles, and pending invites with their ids. Owner-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds real value beyond that by disclosing the return content (members with roles, pending invites with ids) and an authorization constraint (owner-only) that annotations do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler: the resource and contents come first, the access constraint is front-loaded at the end. 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.
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, the description covers what is returned and who may call it. The only gap is what happens when the optional id is omitted (does it default to the selected site?), which list_sites/select_site siblings imply but do not confirm.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single id parameter is fully documented in the schema as 'Site id.' and the description adds no further semantics such as format, defaults, or behavior when id is omitted (it is listed as not required). With 100% schema coverage, the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List a site's members') plus the extra payload detail that pending invites and their ids are included. It does not, however, distinguish itself from the sibling list_members, leaving the agent to infer that one is site-scoped and the other presumably workspace-scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Owner-only.' gives a useful precondition for calling, but there is no explicit statement of when to prefer this over list_members or list_membership_plans, which are the obvious alternatives in a crowded list/member tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesList sitesARead-onlyIdempotentInspect
List all sites belonging to the authenticated tenant (remote).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is a read-only, idempotent, non-destructive, closed-world operation. The description adds useful authentication/tenant context and notes that it is remote, but it does not describe response format, pagination, or other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys scope and authentication context efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with rich safety annotations and no output schema, the description is largely complete. It could add a brief note about the expected return structure or whether results are paginated, but those gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden. The schema coverage is 100%, and the description appropriately does not invent parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all sites,' and adds the scoping condition 'belonging to the authenticated tenant.' It is clear what the tool does, though it does not explicitly differentiate itself from nearby sibling tools such as select_site 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tenant scope implies when this tool is appropriate, but there is no explicit guidance about when to use it versus alternatives. An agent can infer that it is for retrieving sites, but not e.g. whether select_site should be used afterward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesList templatesBRead-onlyIdempotentInspect
List stock templates. Filter by category, tag or q.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query. | |
| tag | No | Filter by tag (e.g. "modern", "dark"). | |
| category | No | Filter by category (e.g. "legal", "portfolio"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the description's only added signal is the word 'stock.' It says nothing about whether multiple filters combine (AND/OR), result ordering, or whether the list is paginated — gaps the annotations do not fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and no padding. The second sentence duplicates what the schema already conveys, which is the only small inefficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with full annotations and full schema coverage, this is close to sufficient, but an agent still cannot tell whether filters combine, whether results are paginated, or how this differs from pull_template.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented with examples in the schema. The description merely restates the filter fields and adds no syntax, combination, or precedence guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List stock templates.' An agent can tell it lists a template library rather than site pages, but the description never names or distinguishes the closest sibling, pull_template, which is the natural follow-on action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — the agent must infer this is the discovery step before pull_template. There is no explicit when-to-use, when-not, or alternative named, and no statement about prerequisites or whether results are global vs site-scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outline_pageOutline pageARead-onlyIdempotentInspect
Outline of a page of an HTML-first site: sections and headings with line ranges, and each {% render %} partial expanded in place, so you can place an edit without reading every file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| page | Yes | Page id, URL (/about) or file path. | |
| expand | No | Expand partials in place (default true). | |
| classes | No | Full class strings (default: first three). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuine value beyond them by disclosing the shape of the result (line ranges per heading, partials inlined) even though no output schema exists. It stops short of mentioning size limits, truncation, or how deeply nested partials are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core capability and ends with the motivating use case. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, 4-parameter tool with full schema coverage and no output schema, the description covers what the tool returns and why, which is the main gap it needed to fill. Behavior on unresolvable page ids, very large pages, or partial cycles is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, including the expand and classes defaults. The description alludes to partial expansion but adds no syntax or format guidance beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (outline a page) and enumerates exactly what the outline contains: sections, headings with line ranges, and expanded {% render %} partials. It is clearly distinct from file-reading siblings like read_site_file, though it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing clause 'so you can place an edit without reading every file' implies the intended moment of use (before editing, as a cheaper alternative to reading files), but it never states when to prefer this over read_site_file, list_pages, or get_block, nor any exclusions.
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 emailARead-onlyIdempotentInspect
Render the saved email with sample data: subject, errors (errors send the default), warnings, plain text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| kind | Yes | See list_site_emails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: rendering uses sample data, and the output carries an errors field whose presence means the live send falls back to the default email — context an agent could not infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with an explicit output-field list. The parenthetical 'errors (errors send the default)' is slightly cryptic and repetitive but carries real information, so nothing worth removing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description compensates by naming the four returned fields, and the input schema is fully self-describing. An agent has enough to call it correctly; only the exact error-case semantics remain a little terse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with id and the 17-value kind enum both documented (kind defers to list_site_emails). The description adds nothing about either parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination: 'Render the saved email with sample data', and enumerates the produced fields (subject, errors, warnings, plain text). This clearly distinguishes it from the adjacent get_site_email/update_site_email siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit statement of when to call this versus get_site_email or update_site_email, nor any prerequisites. Usage is only implied by the phrase 'with sample data', which suggests checking a template before relying on it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_sitePublish siteADestructiveIdempotentInspect
Publish the draft so it goes live. Every write is staged until this runs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
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 known. The description adds genuinely useful staging semantics not in the structured fields. However, it never addresses the destructive aspect — that publishing replaces what is currently live — which is the most consequential thing an agent should know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action stated first and the operational consequence immediately after. Nothing could be cut without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool with rich annotations, this covers the action and the staging model adequately. The remaining gap is the irreversible effect on the currently live site, which the description implies ('goes live') but never states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is documented as 'Site id.', so the schema carries the load. The description says 'the draft' without tying it to the id parameter or noting that the id may be optional (0 required). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Publish') plus a clear outcome ('so it goes live') identifies exactly what the tool does. It doesn't name the obvious inverse sibling unpublish_site, but the publish/unpublish pair is inferable from the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Every write is staged until this runs' gives a concrete condition that tells the agent when this call is required — after any set_/update_/create_ operation. There are no explicit exclusions or named alternatives (e.g., unpublish_site), 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.
pull_templatePull templateARead-onlyIdempotentInspect
Read a stock template's HTML + Liquid files (all, or one with path).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | One file's text. | |
| slug | Yes | Template slug to pull |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds that the payload is raw HTML + Liquid source (not rendered output) and that omitting path returns everything, but says nothing about response size or shape for a multi-file pull, which is the main behavioral risk here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource and the toggle condition both land immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with full schema coverage and annotations, this covers what is needed to invoke it correctly. The remaining gap is the return shape when all files are requested (single string vs. a per-file collection), which matters since no output schema exists, but it is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value the schema does not: it makes explicit that 'path' selects exactly one file and that omitting it returns all files, whereas the schema only says 'One file's text.' That default-behavior clarification is genuine additive meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (a stock template's HTML + Liquid files) with a clear scope qualifier: all files, or one selected by path. It implicitly separates itself from read_site_file/write_site_file by saying 'stock template,' but it never names list_templates, which an agent would need to discover slugs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '(all, or one with path)' clause explains internal usage of the optional parameter, not when to reach for this tool rather than list_templates or read_site_file. Usage is inferable but no explicit when/when-not guidance or prerequisites (e.g., needing a slug from list_templates) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_site_fileRead site fileARead-onlyIdempotentInspect
Read draft files of an HTML-first site, with versions. Read before you edit. paths reads up to 40 files in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| path | No | e.g. pages/index.liquid, partials/header.liquid, theme.css. | |
| paths | No | Several files at once. | |
| endLine | No | ||
| startLine | No | First line (1-based); with endLine for a slice of a long file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds value beyond that: it discloses that content is draft-state, versioned, and that the batch form is capped at 40 files — a hard limit nowhere in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the core purpose first, the workflow rule second, and the batch constraint last. Every sentence carries information the agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero required parameters and no output schema, the description should clarify invocation shape (path vs paths, whether id is needed) and at least hint at the return payload (file contents, line ranges). It covers the batch cap but leaves the required-parameter story and return format unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3; the description clears that bar slightly by stating the concrete 40-file cap for `paths`, which the schema only calls 'Several files at once.' It does not explain the relationship between `path` and `paths` (alternatives?) or whether `id` is effectively mandatory despite nothing being required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (draft files of an HTML-first site), plus a versioning nuance. It is distinguishable from write_site_file / edit_site_files by the read verb and 'draft' qualifier, but never explicitly contrasts with list_site_files or search_site_files, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read before you edit' gives a real workflow cue that establishes ordering relative to edit_site_file/write_site_file. However, it names no alternatives and gives no when-not conditions (e.g. use search_site_files to locate a path, list_site_files to enumerate), leaving sibling selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_productsStripe: refresh productsADestructiveIdempotentInspect
Sync the site's Stripe catalog into its products collection (creates it). Run after products change in Stripe. Returns the product count.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Site id. |
TDQS
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.
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.
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.
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.
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.
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_calendar_linkRemove calendar linkADestructiveIdempotentInspect
Stop reading a calendar link (kind + feedId from list_apps). The rows it filled go with it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| kind | Yes | From list_apps. | |
| feedId | Yes | From list_apps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety bar is lower, but the description adds real value by disclosing the cascade effect: the rows the link filled are removed along with it. That is the single most consequential behavioral fact for this tool and it is not in the schema or annotations. It does not cover permissions or error behavior when the link is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the destructive consequence front-loaded rather than buried. Minor deduction for the pronoun-heavy phrasing 'The rows it filled go with it', which takes a moment to resolve but does not bloat the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter destructive tool with no output schema, the description covers what is removed and where the inputs come from, which is the core need. It is silent on whether the removal is reversible, what happens if the link no longer exists, and what the call returns, leaving gaps an agent calling a destructive endpoint would reasonably want filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum on kind is documented, so the schema carries the parameter work. The description only adds provenance ('kind + feedId from list_apps'), which is useful but marginal and duplicates hints already present in the schema property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb phrase and resource: 'Stop reading a calendar link', with a parenthetical naming the identifying inputs. Combined with 'The rows it filled go with it', an agent can tell this deletes a calendar feed link rather than a site or page, and it is clearly the inverse of the sibling share_calendar_link. The only softness is that 'stop reading' is a euphemism for removal rather than a direct verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the reference to list_apps tells the agent where to obtain kind and feedId, and the pairing with share_calendar_link suggests this is the undo path. There is no explicit 'use this when…' clause and no mention of when not to use it (e.g. when only the imported rows should be cleared).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_downloadRemove downloadADestructiveIdempotentInspect
Remove a download (link then 404s) or one non-current version; unused files are deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| versionId | No | Only this version. | |
| downloadId | Yes | Download id. |
TDQS
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.
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.
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.
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.
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.
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_memberRemove memberCDestructiveIdempotentInspect
Delete a member (customerId or email). Stripe billing continues.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| No | |||
| customerId | No |
TDQS
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 genuinely useful fact beyond that — the Stripe subscription is not canceled, only the membership — but it does not say whether access is revoked immediately, whether the member is notified, or how to undo it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding and the action front-loaded. It is efficient, though the terseness comes partly from omitting information an agent needs rather than from disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, zero-required-parameter tool with no output schema and only a third of its parameters documented. The description should at minimum clarify which identifiers are required and that a site id is implied; as written it leaves the critical call-shape question unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only "id" is documented, as site id). The description mentions customerId and email but omits the site id entirely, so an agent cannot tell whether the call needs a site context plus an identifier or an identifier alone — and with zero required parameters the ambiguity is real, not theoretical.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a member") and adds an identifier hint, so the core action is unambiguous. It does not distinguish itself from adjacent siblings such as revoke_site_invite, set_member, or invite_site_member, which is the missing piece for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not guidance and no named alternative, even though revoke_site_invite and set_member sit in the same sibling set and could plausibly be confused with it. The only hint, "Stripe billing continues," is a behavioral note rather than a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_portalRemove portalBDestructiveIdempotentInspect
Remove/disable the portal on a site (sets portal to null).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
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 by structured data. The description does add one genuinely useful behavioral fact: removal means nulling the portal field rather than deleting portal content, which tells the agent the effect is narrow. It stops short of saying whether this is reversible via set_portal or what happens to portal members/routes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loading the action and immediately qualifying it with the concrete effect. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with a fully documented schema and annotations covering destructiveness and idempotency, the description is nearly sufficient. The only missing element an agent would want is what the resulting site state looks like / how to undo it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage ('Site id.'), so the schema carries full param documentation. The description adds no meaning beyond it — it never mentions that the call requires 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.
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), plus the mechanism (sets portal to null). It does not name the sibling set_portal, which is the natural counter-operation, so an agent must infer the pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to remove versus when to use set_portal, no prerequisites (e.g., a portal must already exist), and no statement about consequences. The agent gets the what but not the when or the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_componentRename componentAInspect
HTML-first sites: rename a component; its file and every {% render %} of it follow.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | Yes | ||
| component | Yes | Component id from list_components. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic profile (readOnly=false, destructive=false, idempotent=false); the description adds the non-obvious cascade that the component's file is renamed and every {% render %} reference is rewritten. That is exactly the extra context annotations cannot convey. It does not say what happens on a name collision or whether the rewrite is atomic, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the scope qualifier front-loaded and the side effect appended as a consequence clause. Nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation with no output schema, the description covers the main risk (cascading reference rewrites) but leaves out collision/validation behavior, whether the old name remains valid, and permission requirements. Adequate to call correctly, not complete for a non-idempotent mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: 'component' is documented as coming from list_components, but 'name' has no schema description at all. The description says 'rename' without stating that name is the new component name, and says nothing about the optional 'id' site identifier. Baseline 3 is warranted, with a small gap left by the undocumented name parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (rename a component) and immediately scopes it to HTML-first sites, which separates it from generic file-edit siblings like edit_site_file. It stops short of naming delete_component or list_components as adjacent operations, but the action 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'HTML-first sites:' prefix implies a precondition (this applies only to HTML-first sites) but is never expanded into an explicit when-to-use or when-not statement. An agent must infer that non-HTML-first sites should use a different mechanism, and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_review_threadReply to review commentAInspect
Answer a review comment (body) and/or settle it (status resolved | closed | open). A reply emails the site's other owners and shows to the client on their link; it does not reopen a resolved comment. Make the change on the site first, then reply saying what you did.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| body | No | The reply, up to 5000 characters. | |
| status | No | Set the status. | |
| threadId | Yes | Thread id from list_review_threads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses important side effects: the reply emails the site's other owners and is visible to the client. It also clarifies that replying does not reopen a resolved thread, which helps an agent understand the mutation's boundaries. It does not explain whether status changes like 'closed' have additional visibility or notification effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, then adds the side-effect and workflow guidance in two compact sentences. Every sentence contributes either scope, behavior, or usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-read-only mutation with no output schema and complete schema coverage, the description covers the core action, side effects, and workflow well. It could be slightly more complete by distinguishing the practical effect of 'resolved' versus 'closed' statuses, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters. The description nevertheless adds useful meaning by clarifying that 'body' is the reply text and 'status' can be set to resolved, closed, or open, and that either action can be used independently or together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: replying to a review comment/thread. It also distinguishes the two supported actions, posting a body and/or setting a status, so an agent can tell what the tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear workflow guidance: make the site change first, then reply describing what was done. It also notes a limitation that a reply does not reopen a resolved comment, though it does not explicitly name alternatives or when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_form_webhookResend form webhookAInspect
Resend a submission's webhook from the start (attempts reset), to the form's current URL, signed with the current secret; same submissionId so receivers dedupe. For a FAILED or stuck delivery, after fixing the receiver or the URL. Owners only. Check the result with list_form_submissions({ submissionId }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| submissionId | Yes | Submission id from list_form_submissions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare it is not read-only, not destructive, not idempotent, and open-world; the description adds substantial context beyond that. It discloses that attempts reset, the webhook is sent to the form's current URL, it is signed with the current secret, the same submissionId is reused for receiver deduplication, and only owners can 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core action and state change: resend from the start with attempts reset. Every clause carries useful information about targeting, signing, deduplication, usage condition, authorization, and result verification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with full schema coverage and no output schema, the description supplies everything needed: when to use it, what state changes, how the target and signing are determined, who can call it, and how to verify the outcome. No critical behavioral or contextual gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both id and submissionId are already documented in the schema. The description adds useful semantic context around submissionId by explaining that the same submissionId is reused so receivers can dedupe, and it points to list_form_submissions as the source for that value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: resend a submission's webhook from the start with attempts reset. It also distinguishes the operation from sibling tools like list_form_submissions and list_form_webhooks by explaining that it targets an existing submission's webhook delivery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this for a FAILED or stuck delivery after fixing the receiver or URL, which is a clear when-to-use condition. It also names list_form_submissions({ submissionId }) as the way to check the result and states the ownership prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_site_revisionRestore site revisionADestructiveInspect
Put a past version back into the DRAFT (never the live site; publish_site is separate). The current state is kept first (safety backup + a version in history), so it can be undone. scope 'site' (default) restores every file and page; 'page' one page (pageNodeId from list_site_history with revisionId). Unpublished work in the draft is replaced: confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| scope | No | site (default) or page. | |
| pageNodeId | No | Which page, for scope page. | |
| revisionId | Yes | Revision id from list_site_history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds the details an agent actually needs: current state is snapshotted first (safety backup plus a history version) so the operation is undoable, live site is untouched, and unpublished draft work is replaced. That is exactly the 'what gets destroyed / what is recoverable' context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero waste, and the single most important constraint (DRAFT only, never live) is front-loaded in the first line. Parentheticals are used to pack alternatives and provenance rather than adding separate sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, the description covers recoverability, blast radius per scope, parameter provenance, and the required user confirmation. Nothing an agent needs in order to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, but the description goes further by explaining the effect of each enum value (site = every file and page, page = one page) and by tying pageNodeId and revisionId to their upstream source in list_site_history. It stops short of noting that id is optional/inferred, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Put a past version back') and immediately pins the target scope: the DRAFT, never the live site. It explicitly separates itself from publish_site, so an agent can distinguish restore-from-history versus go-live 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use branches: scope 'site' (default) for every file and page versus 'page' for one page, and names the prerequisite source for pageNodeId/revisionId (list_site_history). It also states an explicit gating condition — confirm with the user first — which is real usage guidance, not filler.
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 inviteADestructiveIdempotentInspect
Revoke a pending invite by id (from list_site_members). Owner-only; existing members stay.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| inviteId | Yes | Invite id. |
TDQS
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.
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.
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.
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.
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.
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 siteARead-onlyIdempotentInspect
Screenshot the DRAFT in a real browser (the preview, with the site's own JavaScript running) — the only way to see compiled CSS, theme, state-driven UI, scripts and responsive layout. Shoot sections with selector (full size, not scaled down), at the design width and at 390.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| path | No | Page slug (omit for home). | |
| width | No | 320–1920 (default 1440). | |
| height | No | 480–2400 (default 900). | |
| fullPage | No | Whole page; ignored with selector. | |
| selector | No | CSS selector, e.g. "#check". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive profile, and the description adds genuinely new behavioral facts: rendering happens in a real browser with JS, it captures the draft/preview rather than the live site, and selector shots are rendered full size rather than scaled. It omits return shape (how many images, what format) and any rate/size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core capability front-loaded and the practical shooting guidance second. The telemetry-style shorthand ('at 390', 'full size, not scaled down') is compact but slightly clipped for a reader unfamiliar with the workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should say what comes back — a single image, an array, URLs, or inline data — and it does not. Everything else an agent needs (preview scope, browser rendering, selector behavior, width choice) is present, but the return-value gap is material for a tool whose whole output is a screenshot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics: width should be the design width or 390, and selector captures a section at full size rather than scaled. That is meaning beyond the schema's numeric ranges and example selector.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (screenshot) and resource (the DRAFT/preview of a site) and immediately qualifies the mechanism — a real browser with the site's own JavaScript running. The 'DRAFT' scope and the mention of compiled CSS/theme/scripts clearly separate it from drafting/editing siblings like update_page or outline_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear rationale for when to reach for it ('the only way to see compiled CSS, theme, state-driven UI, scripts and responsive layout') and prescribes shooting sections via selector at the design width and at 390. It does not name an alternative or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_blocksSearch blocksARead-onlyIdempotentInspect
Search the block library; returns one page of slugs with descriptions and tags (Liquid: get_block). Blocks are copy-source examples, not defaults. q takes short layout phrases ("split hero"), categories / styles arrays OR-filter, page pages through. Guide: get_style_reference({ topic: "blocks" }).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Short layout phrase, e.g. "photo hero"; sorts by relevance. | |
| id | No | Site id. | |
| tag | No | e.g. "pricing". | |
| page | No | Default 1. | |
| sort | No | popular | newest | name | relevance. Default: relevance with q, else newest. | |
| group | No | Logical group, e.g. "acme-homepage-cards". | |
| limit | No | Default 50, max 100. | |
| style | No | One vibe; auto-set from the site's buildStyle. | |
| preset | No | Starter/bundle id, e.g. "acme". | |
| source | No | Legacy field; prefer preset. | |
| styles | No | OR-filter by several vibes. | |
| category | No | One category (merged with categories). | |
| featured | No | Curated only. | |
| blockType | No | section (default) = page sections; component = patterns inside sections. | |
| categories | No | OR-filter by several categories. | |
| subcategory | No | e.g. "testimonials". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, closed-world, so the safety profile is settled. The description contributes non-obvious behavior: results are paginated to one page and items are copy-source examples rather than defaults. It doesn't mention result caps or empty-result behavior, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose and return shape, then the usage caveat, then parameter hints. It is dense and earns its space, though the terse backtick style and compressed clauses make it slightly harder to parse than plain prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, no-output-schema search tool, the description supplies what the schema cannot: the page-based return shape, the copy-source semantics, and the OR-filter/paging behavior. Combined with annotations and full schema coverage, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 16 parameters is already documented, including q, categories, styles, and page. The description restates that q takes short layout phrases, that the arrays OR-filter, and that page pages through — useful reinforcement but nearly duplicative of the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search the block library") and immediately defines the return shape ("one page of slugs with descriptions and tags"). The parenthetical Liquid equivalent and the pointer to get_block separate it from list_blocks and get_block without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a real decision rule that isn't anywhere else: "Blocks are copy-source examples, not defaults" tells the agent these are starting points to copy, not drop-in defaults. It routes to get_style_reference for deeper guidance, but never explicitly contrasts with sibling list_blocks, so it stops short of a full when/when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_site_filesSearch site filesARead-onlyIdempotentInspect
Find text or a regex across draft files. Each hit is path:line:column plus the text around the match: copy oldText from it. context adds the lines around.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| glob | No | Only paths matching, e.g. **/*.liquid. | |
| path | No | Only paths starting with this, e.g. pages/. | |
| query | Yes | ||
| regex | No | query is a JavaScript regex, case-insensitive. | |
| context | No | Lines around each hit (0-5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying that search is across draft files and by describing the hit format as path:line:column with surrounding text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with the core scope and result format front-loaded. Every sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With read-only annotations, no output schema, and high schema coverage, the description supplies the key missing pieces: draft-file scope and result format. It could say more about result limits or pagination, but it is complete enough for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so most parameters are already documented in the schema. The description adds little parameter-level detail beyond clarifying that query may be text or regex and that context adds surrounding lines, both of which are largely covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find text or a regex across draft files.' This clearly distinguishes it from listing or reading a single file, though it does not explicitly name sibling alternatives such as list_site_files or read_site_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mention of searching draft files and copying oldText from hits, which suggests it is for locating text before edits. However, there is no explicit guidance on when to use this versus list_site_files, read_site_file, or edit_site_files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_siteSelect siteARead-onlyIdempotentInspect
Set the active site for this session and clear any active template. Returns the site's settings and its previewUrl. The hosted server doesn't keep it between calls — still pass id on every call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds meaningful behavioral context: it clears any active template, returns the site's settings and previewUrl, and explains that the hosted server does not retain the selection between calls. This is valuable context not captured by readOnlyHint or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences with no wasted text. The core action is front-loaded, and the operational caveats follow immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description explains what is returned: the site's settings and previewUrl. It also covers the session and non-persistence behavior, leaving no major gaps for an agent invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a useful usage nuance by emphasizing that `id` must still be passed on every call despite the session not persisting it, which goes slightly beyond the schema's 'Site id.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Set the active site for this session.' It also clarifies scope by saying it clears the active template, which distinguishes it from sibling tools like update_site or list_sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies when to use this tool: to make a site active for the current session. It also warns that the hosted server does not persist the selection, so `id` must be passed on every call. It does not name alternatives, but no obvious sibling alternative exists for this session-selection purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_checkoutSet checkoutADestructiveIdempotentInspect
Make a collection sellable through Stripe (remove: true stops): data-cart="add" buttons inside a {% for row in collections.<slug> %} loop charge each row's price (minor units) or its Stripe price id (priceIdField). Needs stripe_connect. Details: get_style_reference({ topic: "integrations" }).
| Name | Required | Description | Default |
|---|---|---|---|
| remove | No | Stop selling; rows stay. | |
| siteId | No | Site id. | |
| priceField | No | Row field with the display price. | |
| priceIdField | No | Row field holding a Stripe price id. Omit to charge `price`. | |
| variantsField | No | Row field with a variants array (each with its own priceId). | |
| collectionSlug | Yes | Collection to sell. | |
| inventoryField | No | Row field with stock count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag mutation, destructiveness, and idempotency, so the description adds real value by revealing the mechanism: data-cart add buttons inside a for loop charge each row's price or Stripe price id, and remove:true stops selling while rows stay. That tells the agent what the operation touches and that removal is non-destructive to data. It doesn't fully describe what it modifies on the site or whether checkout config elsewhere is affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the primary purpose and packs the key mechanism into a single dense sentence with useful parentheticals. The density and inline code syntax make it slightly hard to parse, but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter destructive mutation with full schema coverage and no output schema, the description supplies the important operational context: prerequisite integration and the markup pattern that makes checkout work. It is sufficient to call the tool correctly, though it could clarify scope (per-site vs global) and what exactly is modified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description mostly repeats what the schema says (price in minor units, priceIdField, remove behavior) rather than adding new meaning. Baseline 3 is appropriate when the schema carries the detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it makes a collection sellable through Stripe, and notes that remove:true stops the behavior. It also references the prerequisite stripe_connect, which helps distinguish it from generic collection tools, though there is no direct sibling comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context for when to use it (making a collection sellable) and when to undo (remove:true). The prerequisite 'Needs stripe_connect' and the pointer to get_style_reference({ topic: 'integrations' }) for details are concrete usage guidance. There are no explicit exclusions or alternative tools named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_collection_webhookSet collection webhookADestructiveInspect
Make a collection a webhook feed, or rotate / set its signing secret. Senders POST rows to the ingest URL (shown, with how to sign) and they upsert by externalId. rotate:true mints a new secret (shown once; the old stops working); secret uses the sender's own. Owner or agency. A collection syncing from Sheets/Airtable isn't converted. get_collection shows the URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug. | |
| rotate | No | Mint a new secret for an existing feed. | |
| secret | No | The sender's own secret, 16-256 characters, no spaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and non-idempotent, and the description earns that: rotating means 'the old stops working' and the new secret is 'shown once'. It also discloses the runtime behavior the agent needs — senders POST rows to the ingest URL and rows upsert by externalId — which no structured field conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and free of filler, but the telegraphic fragments ('Owner or agency.', 'get_collection shows the URL.') read as clipped notes rather than prose. Every sentence still carries information, so nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with no output schema, the description covers the conversion exclusion, the one-time secret reveal, upsert-by-externalId semantics, signing guidance being shown, and where to read the URL. An agent can call this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further for the two non-obvious parameters: rotate implies a one-time reveal and immediate invalidation of the prior secret, and secret is clarified as 'the sender's own' rather than a generated value, resolving ambiguity the schema text alone leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a precise verb and resource: 'Make a collection a webhook feed, or rotate / set its signing secret.' It covers all three modes (convert, rotate, set) in one clause and is clearly distinct from siblings like set_form_webhook_secret and get_collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the selection condition for each mode ('rotate:true mints a new secret', 'secret uses the sender's own'), names an explicit exclusion ('A collection syncing from Sheets/Airtable isn't converted'), a permission gate ('Owner or agency'), and routes to a sibling for the read path ('get_collection shows the URL').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_datesSet datesADestructiveIdempotentInspect
One of: close dates on homes (a booked date stops that home only), reopen dates the owner closed (rowId + claimId from get_calendar; an order's dates are freed with update_order unbook), or retry a date that didn't reach the rental tool.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| slug | Yes | Collection slug. | |
| close | No | ||
| reopen | No | ||
| retryPushId | No | From get_calendar. |
TDQS
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 description does not need to re-state safety metadata. It adds useful behavioral nuance, especially that a booked date stops only that home, that reopen requires rowId+claimId from get_calendar, and that retry targets a date that did not reach the rental tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence that enumerates the three modes without filler. It is dense but efficient; a slightly clearer separation of the modes would improve scanability without adding much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, destructive, multi-mode tool with nested objects and no output schema, the description covers the major decision paths and references the sibling tools that supply required identifiers. It leaves some parameter-source gaps around close.rowIds, but overall provides enough context for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with nested objects and several undocumented fields such as close.rowIds, close.note, reopen.rowId, and reopen.claimId. The description adds meaning by sourcing reopen and retry inputs from get_calendar, but it does not explain where close.rowIds come from or clarify the mode-selection relationship to the close/reopen/retryPushId properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly frames set_dates as a multi-action tool with three explicit modes: close dates on homes, reopen owner-closed dates, and retry a failed rental-tool push. It names the specific resource and distinguishes the actions well, though the domain terms 'homes' and 'rental tool' remain somewhat specialized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance for each mode and routes the agent to get_calendar for reopen/retry identifiers and update_order unbook when an order's dates need to be freed. It lacks a formal when-not section, but the alternatives are clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domainSet domainADestructiveIdempotentInspect
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" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| domain | Yes | Apex or www form; both variants are registered. Detach with clear_domain. | |
| redirectMode | No | to-apex (default, www → apex 308) | to-www | none. |
TDQS
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.
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.
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.
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.
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.
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 modeBDestructiveIdempotentInspect
Switch the apex/www redirect pairing on an attached domain.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| redirectMode | Yes | New pairing. |
TDQS
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.
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.
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.
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.
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.
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 downloadADestructiveInspect
Host a file behind a stable link (/api/downloads/); link to it from an or button. New: name + file. New version: downloadId + file (same link). Roll back: downloadId + currentVersionId. File = filePath (stdio) or an upload's mediaId (a public upload, e.g. a chat attachment, is moved private). access makes it members-only. A plays it. Pro+; .exe/.dmg etc need Agency.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | No | Display name; required when creating. | |
| label | No | e.g. v1.2 | |
| notes | No | Changelog. | |
| access | No | Members-only: members true = any plan; plans = one of these. members false = public. | |
| mediaId | No | An uploaded file's mediaId (upload_file or a chat attachment); not images. | |
| filename | No | Saved-as name; required with mediaId. | |
| downloadId | No | Existing download; omit to create. | |
| currentVersionId | No | Serve this existing version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations (destructiveHint true, openWorldHint true, idempotent false): a public upload is moved private on use, access makes it members-only, and plan/type restrictions gate execution. These are non-obvious side effects and constraints the annotations don't convey. Return/error behavior is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and then uses terse labeled clauses (New / New version / Roll back) that are easy to scan. The telegraphic abbreviations and inline HTML snippets pack a lot in, bordering on cryptic but without wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-param tool with a nested object and no output schema, the description covers creation, versioning, rollback, access, inline embedding, and plan gating. It doesn't state what the call returns (the id/link to surface), but that is largely inferable from the stable-link framing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the description earns more by explaining the semantic relationships: omit downloadId to create, same link is reused on new version, and file = mediaId vs filePath. The mention of filePath, which isn't a schema property, is a minor inconsistency but plausibly a stdio-mode variant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (host/set) and resource (download/file behind a stable link) and immediately grounds it in the artifact produced (<site>/api/downloads/<id>). The New/New version/Roll back framings make the tool's role unmistakable relative to siblings like list_downloads or remove_download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps parameter combos to outcomes (New = name + file; New version = downloadId + file; Roll back = downloadId + currentVersionId), which is exactly the when-to-use guidance an agent needs. It also states plan prerequisites (Pro+; .exe/.dmg need Agency). It stops short of naming an alternative tool for cases this doesn't cover, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_faviconSet faviconADestructiveInspect
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. HTML-first: site.json. More: get_style_reference({ topic: "media" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| clear | No | Remove the favicon; other fields ignored. | |
| mediaId | No | Existing media id (no upload). | |
| filename | No | Filename hint. | |
| imageUrl | No | Public URL to upload. | |
| mimeType | No | For dataBase64 (default image/png). | |
| dataBase64 | No | Base64 or data URL. Small icons only (~3MB cap). | |
| svgContent | No | Raw SVG the user supplied (starts with <svg or <?xml). Never fabricate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, so the description's job is to add operational context — and it does: changes are staged and require publish_site to go live, dataBase64 is capped at ~3MB, and svgContent must be user-supplied ('Never fabricate'). It doesn't say what happens if two sources are supplied or whether an existing favicon is replaced vs. rejected, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six dense sentences with the operation and the source-selection rule front-loaded, and the workflow hints (staged, publish) at the end where they belong. A couple of fragments ('HTML-first: site.json') are cryptic enough to cost a point on readability, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight parameters, no output schema, and a destructive annotation, the description supplies the essential decision logic: which source to use, format recommendations, size limits, and the staging/publish workflow. Remaining unknowns — return value and error behavior on conflicting sources — are secondary for a tool whose safety profile is already declared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns extra by framing five of the eight parameters as a mutually exclusive source set rather than independent options, which the flat schema can't express. It also adds quality guidance ('512px square PNG or an SVG') that no parameter description conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pairing ('Set or clear the site favicon') and immediately scopes it to a single site's favicon, which no sibling tool touches. The dual set/clear capability is stated up front, so an agent can distinguish it from upload_image or upload_file 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a hard selection rule ('Exactly one source') and enumerates all five mutually exclusive branches, so the agent knows which parameter combinations are legal. It also points to get_style_reference({ topic: "media" }) for further guidance and notes mediaId means 'no upload'. It stops short of saying when to prefer this over uploading via upload_image first, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_form_webhook_secretSet form webhook secretADestructiveInspect
Rotate or set the secret that signs a form webhook (X-PageHub-Signature, HMAC-SHA256). rotate: PageHub makes a new one, shown ONCE: give it to the user for the receiver; the old one stops working. set: store the secret the receiver issued (16-256 chars, no spaces). endpoint from list_form_webhooks. Owners only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| action | Yes | rotate or set. | |
| secret | No | For set: the receiver's secret. | |
| endpoint | Yes | The endpoint key from list_form_webhooks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/idempotentHint annotations: rotate's new secret is shown ONCE and must be handed to the user, the old one immediately stops working (irreversibility made concrete), set enforces 16-256 chars with no spaces, and the operation is owners-only. That is exactly the operational context an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool does, then splits rotate vs set into scoped clauses, then names the endpoint source and the permission requirement. Telegraphic but every clause carries unique information; nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation with no output schema, the description covers the irreversible consequence, the one-time display of the returned secret, input constraints, prerequisite listing tool, and authorization level. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning: `secret` is only for set (not rotate), its length/charset constraints, and the provenance of `endpoint` from list_form_webhooks. It does not clarify why `id` (site id) is present alongside `endpoint`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (rotate/set) and the exact resource — the webhook signing secret for a form, with the header and algorithm named. 'Form webhook' distinguishes it from the sibling set_collection_webhook without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description disambiguates the tool's own two modes: rotate when PageHub should mint a new secret, set when storing a receiver-issued secret. It also tells the agent where `endpoint` comes from (list_form_webhooks). It does not explicitly rule out the collection-webhook sibling, but the resource naming makes the boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_integrationsSet integrationsBDestructiveIdempotentInspect
Set analytics and verification ids, rendered as real tags on published pages: GA4, GTM, Search Console, Meta Pixel, Google Ads, TikTok, LinkedIn, Pinterest, Clarity, Hotjar, Plausible, Fathom, Umami, chat widgets. Third-party snippets go in site.json inject; the site's own code is a , {% javascript %} or assets/*.js file. Guide: get_style_reference({ topic: "integrations" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| tawk | No | tawk.to propertyId/widgetId (chat). | |
| crisp | No | Crisp website id (chat). | |
| tidio | No | Tidio public key (chat). | |
| umami | No | Umami website id. | |
| fathom | No | Fathom site id. | |
| hotjar | No | Hotjar site id. | |
| privacy | No | See the integrations guide. | |
| intercom | No | Intercom app id (chat). | |
| googleAds | No | AW-XXXXXXXXXX. Needed for per-action google-ads conversions. | |
| metaPixel | No | Meta Pixel id. | |
| plausible | No | Plausible id (after /js/pa-). | |
| umamiHost | No | Self-hosted Umami server. | |
| hubspotChat | No | HubSpot hub id (chat). | |
| tiktokPixel | No | TikTok Pixel id. | |
| pinterestTag | No | Pinterest Tag id. | |
| plausibleHost | No | Self-hosted Plausible server. | |
| intercomRegion | No | us, eu or au. Default us. | |
| googleAnalytics | No | GA4 id, G-XXXXXXXXXX. | |
| linkedinInsight | No | LinkedIn partner id. | |
| googleTagManager | No | GTM-XXXXXXX. | |
| microsoftClarity | No | Clarity project id. | |
| googleSearchConsole | No | Verification content value only, not the meta tag. |
TDQS
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 partly covered. The description adds useful behavior: these IDs render as real tags on published pages. It does not clarify whether omitted parameters are preserved or cleared, which matters for a destructive 23-parameter configuration tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action and effect are front-loaded, and the provider list is dense but useful for recognition. The guide pointer is actionable and compact. There is little wasted text, though the long provider enumeration adds some bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the broad purpose, provider categories, snippet placement, and guide reference, which is adequate for a 23-parameter tool with full schema coverage and annotations. It stops short of explaining update semantics for partial payloads and does not mention the chat-related sibling, so an agent may still hesitate in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter, including formats like G-XXXXXXXXXX and AW-XXXXXXXXXX. The description groups the parameters into analytics, verification, and chat widgets and points to the integrations guide. It adds only modest meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: setting analytics and verification IDs that render as real tags on published pages. It lists representative providers and chat widgets, making the scope clear. It does not distinguish this tool from nearby siblings such as set_site_chat, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the provider list and the note that third-party snippets belong in site.json inject, while the site's own code is a script or asset file. That provides some boundaries on when not to use this tool. However, it never explicitly names an alternative tool or states when to choose set_site_chat versus this integration setter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_memberSet memberBDestructiveInspect
add (email, plan?, sendInvite?), or grant/revoke/extend a plan, block/unblock, rename a member found by customerId or email. Never cancels Stripe billing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | No | ||
| note | No | ||
| plan | No | Plan slug. | |
| No | |||
| action | Yes | ||
| expiresAt | No | ISO date. | |
| customerId | No | ||
| sendInvite | No | add: email a sign-in link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, openWorldHint=true, and non-idempotent, so the safety profile is covered upstream. The description adds genuinely useful behavior beyond that — the billing boundary ("Never cancels Stripe billing") and the effect of each action — but omits permission requirements, whether revoked/blocked access takes effect immediately, and what a failed action returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the action list front-loaded and the billing constraint placed at the end as a boundary. It is efficient and telegraphic; the parenthetical "(email, plan?, sendInvite?)" packs per-action parameter hints without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter destructive mutation with no output schema and no annotations covering return behavior, the description is too thin: it never explains the `id` (site id) versus `customerId` distinction, which action consumes `name`, `note`, or `expiresAt`, or what the tool returns on success. An agent could invoke it with a plausible but wrong argument set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 44%, but the description compensates for the most important gaps by binding parameters to actions: email/plan/sendInvite for add, and customerId-or-email as the member lookup key. It leaves the ambiguous `id` (site id) and `note`/`expiresAt` unexplained, and never states which action requires expiresAt or name, so roughly half the parameters still lack meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the concrete operations (add, grant/revoke/extend a plan, block/unblock, rename) and the lookup keys (customerId or email), so the agent knows exactly what the tool does. It does not reference the closely related siblings (remove_member, invite_site_member, list_members), so differentiation from them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It shows what each action does and includes a partial when-not clause ("Never cancels Stripe billing"), which implies this is not the tool for deleting a member or managing billing. However, it never says when to prefer remove_member, invite_site_member, or list_members over set_member, leaving routing between these overlapping tools implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_membership_planSet membership planADestructiveIdempotentInspect
Create (new slug) or edit a plan; only passed fields change. Slug is permanent; gate content in Liquid with customer.me | first, then me.plans[''] (get_style_reference members). Paid: stripePriceIds. Free: selfSignup. Pro+.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | No | Required when creating. | |
| slug | Yes | a-z, 0-9, dashes. | |
| archived | No | Stop selling; members keep it. | |
| accessDays | No | One-time prices: days per purchase. Omit = lifetime. | |
| selfSignup | No | Free plan; only with no prices. | |
| description | No | ||
| stripePriceIds | No | Stripe price ids or pd:<rowId>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds the important non-obvious behaviors: partial update ('only passed fields change') and slug permanence, which is an irreversible naming decision. The 'Pro+' suffix flags a plan prerequisite. Return shape and what happens to existing prices on edit are not covered, keeping it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly three dense clauses with the create/edit distinction front-loaded and zero filler. The Liquid gating fragment ('customer.me | first, then me.plans[<slug>]') is telegraphic and takes a re-read, which costs a point, but every sentence carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 8-parameter mutation with annotations but no output schema, the description covers the risky parts: partial updates, immutable slug, paid vs free configuration, and the plan-tier requirement. It does not describe the result of the call or how archived plans behave, but the 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so the schema already documents all 8 parameters well. The description adds cross-parameter meaning by pairing paid plans with stripePriceIds and free plans with selfSignup, plus the note that name is needed on create. That is useful but largely restates schema constraints, so baseline-plus is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create (new slug) or edit a plan') and defines the operation as an upsert keyed on slug. That immediately distinguishes it from list_membership_plans and from the set_member/set_portal siblings without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete configuration context: paid plans use stripePriceIds, free plans use selfSignup, and the tool is 'Pro+'. It also points to get_style_reference for member gating. It stops short of explicit when-not-to-use guidance or stating the alternative for reading plans, but the conditions for each mode are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_portalSet portalBDestructiveIdempotentInspect
Enable a portal UI around the published site (sales banner, client review, demo).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| type | Yes | "sales", "review", "demo", …. | |
| config | No | Extra portal config, merged in. | |
| status | No | e.g. "unclaimed" (default), "claimed". |
TDQS
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 covered structurally. The description adds useful domain context about portals and example types, but it does not explain what enabling replaces, how config is merged, or what permissions are required. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single tightly written sentence with the core action front-loaded. The parenthetical examples are compact and useful, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with a nested config object, the definition is adequate mainly because annotations and a fully documented schema carry the safety and parameter burden. It still lacks explicit handling of prerequisites such as publishing, precedence when a portal already exists, and the resulting effect of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, type, config, and status are already documented in the schema. The description's parenthetical examples overlap with the type parameter's existing examples and do not add format or interaction semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Enable') and resource ('portal UI') scoped to the published site, with examples of portal types. It does not explicitly contrast with sibling tools such as get_portal or remove_portal, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, no stated prerequisites beyond the passing phrase 'around the published site,' and no alternative tool named. An agent must infer that get_portal or remove_portal should be used for other portal operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_promo_codeSet promo codeADestructiveInspect
Make a promo code (code + percentOff 1-99, or amountOff in cents) or turn one off or on (promoCodeId + active). Works on the booking card and Stripe's page; tax is worked out on the price after the code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | New code: 3-32 letters, digits, dashes. | |
| active | No | With promoCodeId: false turns it off. | |
| siteId | Yes | Site id. | |
| currency | No | With amountOff. Default usd. | |
| amountOff | No | Cents off, in currency. | |
| expiresAt | No | ISO date the code ends. | |
| percentOff | No | Whole percent, 1-99. | |
| promoCodeId | No | Existing code id (promo_...) to turn off or on. | |
| maxRedemptions | No | Most uses. Omit for no limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true. The description earns credit for naming the external system ('Stripe's page') and the pricing semantics ('tax is worked out on the price after the code'), which annotations cannot express. However it never explains what deactivation destroys (existing redemptions? active checkouts?), why the call is non-idempotent, or what permissions are required — gaps that matter 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the primary operation and its parameter pairings front-loaded, followed by the side-effect note. No filler and nothing repeated from the schema verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter destructive mutation with no output schema, the description covers the operation modes, the cross-system side effect, and pricing behavior, with annotations carrying the safety profile and the schema carrying parameter detail. It leaves out error behavior (e.g. code already exists) and what a successful call returns, which keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by describing the mutual grouping of parameters — percentOff/amountOff pair with a new code, promoCodeId pairs with active — which the flat schema does not convey. It stops short of explaining defaults or interactions for currency, expiresAt, and maxRedemptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make a promo code') and immediately enumerates the two supported operation modes: create (code + percentOff/amountOff) and toggle (promoCodeId + active). This makes it trivially distinguishable from the read-only sibling list_promo_codes 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies which parameter combinations select each mode, which is genuine usage guidance, but it never states when to use this tool versus list_promo_codes to find an id first, nor any prerequisites (e.g. Stripe connection, plan tier). Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_redirectsSet redirectsADestructiveIdempotentInspect
Replace the site's 301/302 redirect rules, evaluated server-side before render. Paths are site-relative; destinations may be absolute URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| redirects | Yes | [{ from, to, permanent? }]. Pass the full list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds material context: the entire rule set is replaced (not merged), evaluation occurs server-side before render, and path/URL format rules. It stops short of saying what happens to existing rules on partial failure or whether a publish step is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the destructive full-replacement semantics and evaluation order front-loaded. Every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent bulk-write tool with full schema coverage and no output schema, the description covers the essential semantics (full replacement, evaluation timing, path/URL rules). It omits failure-mode behavior and the 500-rule cap is left to the schema, so a small gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters and the nested from/to/permanent fields are already documented, making 3 the baseline. The description's note that paths are site-relative and destinations may be absolute URLs largely restates the schema's own field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Replace') plus resource ('301/302 redirect rules') and a scope note ('evaluated server-side before render') tell the agent exactly what operation happens. It does not explicitly differentiate itself from the adjacent set_domain_redirect_mode sibling, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Replace' plus the schema's 'Pass the full list' signals the full-overwrite usage model, so the agent can infer this is not an append/patch call. However, there is no explicit when-to-use guidance, no mention of the alternative (set_domain_redirect_mode), and no note about prerequisites such as site selection or publish requirements.
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 chatADestructiveIdempotentInspect
Change the site's chat bot settings; only the fields you pass change. Leads save to Form Submissions as "Chat". Visitors see it while the owner has credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| enabled | No | Turn chat on or off. | |
| greeting | No | First message visitors see. | |
| leadFields | No | Details to collect before saving a lead. Must include email or phone. | |
| notifyEmail | No | Extra address emailed for each lead. Empty stops. | |
| instructions | No | Owner guidance: tone, what to push, what to avoid. Empty clears. | |
| assistantName | No | Name shown in the chat header. | |
| dailyCreditCap | No | Credits per UTC day for all chats; 0 pauses chat. Omit for the plan default. | |
| leadCollectionSlug | No | Also save each lead as a row in this collection. Empty stops. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds real context beyond them: partial-update behavior, that leads land in Form Submissions as 'Chat', and that visitors only see the chat while the owner has credits. It does not explain what 'destructive' concretely means (e.g. clearing fields via empty strings), which the schema covers but the description does not echo.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core behavior front-loaded and the side effects second. Every clause carries information, though the credits clause is slightly compressed and could be a touch clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the description covers the important non-obvious behaviors (partial update, lead routing to Form Submissions, credit-gated visibility). Permissions or failure modes are not addressed, keeping it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 9 parameters is already documented with constraints and empty-string semantics. The description only restates the optional/partial-update nature rather than adding field-level meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (change the site's chat bot settings) plus the partial-update semantics, which an agent can distinguish from the read-only sibling get_site_chat. It stops short of naming any sibling explicitly, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'only the fields you pass change' implies this is the tool for partial updates and warns that omitted fields are untouched, which is genuine usage guidance. But there is no explicit when-not-to-use guidance or pointer to get_site_chat/other siblings for reads or resets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_themeSet themeADestructiveIdempotentInspect
Write the site theme into theme.css (draft): preset, palette, darkPalette, styleGuide tokens (incl. spacingDensity, radii), fonts, typography (type scale), breakpoints. suggest_palettes / suggest_font_pairings only show options. Company fields: site.json (edit_site_file). Names, keys, workflow: get_style_reference({ topic: "theme" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| fonts | No | Hint ({ url } or { families }) parsed into heading/body families when styleGuide omits them. | |
| preset | No | Preset slug; loads palette, fonts and styleGuide. Explicit params override it. | |
| daisyui | No | DaisyUI component classes (btn, card…). Default on; HTML imports off. | |
| palette | No | Complete 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(). | |
| styleGuide | No | Design 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" }). | |
| typography | No | Type scale tokens, merged by name over the ones fonts made: [{ name: "Heading", fontSize: "3rem", lineHeight: "1.1", letterSpacing: "-0.02em", fontWeight: "700", textTransform: "none" }]. Each field becomes --heading-font-size etc.; the `ph-heading` / `ph-body` classes read them. | |
| breakpoints | No | Responsive widths in px for the whole site (sm, md, lg, xl, 2xl; Tailwind's are 640, 768, 1024, 1280, 1536): { md: 800, lg: 1100 }. What sm:/md:/lg: classes switch at, in the published site. | |
| darkPalette | No | Optional dark-mode palette with the same names. Enables dark mode. |
TDQS
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 adds the crucial mitigating context that output goes into theme.css as a draft, so changes are not live until published. It also signals that palette replacement is whole-value rather than additive (per schema) and points to the reference tool for token key validity, though it says nothing about failure modes for invalid presets or token keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and target file, then a compact coverage list, then routing. The telegraphic colon style packs a lot into four sentences with no filler, though the dense clause stacking is slightly harder to parse than plain prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object, no-output-schema mutation tool, the description covers what gets written, where, and which sibling to consult for names and previews. The main remaining gap is the publish step and how token/key validation failures are surfaced, which an agent would need to know before relying on the draft write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by mapping parameter groups to destinations (theme.css vs site.json) and directing agents to get_style_reference for the styleGuide key list and naming conventions. It still leaves the preset override precedence and font-hint behavior to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Write the site theme into theme.css') followed by an enumeration of exactly what it covers (preset, palette, darkPalette, styleGuide, fonts, typography, breakpoints). It also carves out scope against siblings: suggest_palettes/suggest_font_pairings only preview, company fields belong in site.json via edit_site_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes agents away from suggest_palettes/suggest_font_pairings ('only show options') and toward edit_site_file for company fields and get_style_reference for token names/keys/workflow. It doesn't state exclusions relative to other theme-adjacent siblings such as apply_kit_block or update_site, so it stops short of full when/when-not coverage.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Site id. |
TDQS
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.
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.
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.
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.
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.
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 productARead-onlyIdempotentInspect
One Stripe product by id or metadata.slug: title, description, price(s), images, metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Stripe product id (prod_…); wins over slug. | |
| slug | No | metadata.slug. | |
| siteId | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds useful substance by enumerating what a successful call returns (title, description, price(s), images, metadata), which is the main behavioral fact annotations cannot convey and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource, key options and returned fields; nothing is wasted. It is dense to the point of terseness, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Listing return fields compensates well for the absent output schema, but for a tool in a large catalog with a near-identical sibling (stripe_search_products) the description offers no routing rule and no failure behavior for an unmatched id or slug. Adequate, with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already states 'Stripe product id (prod_…); wins over slug', so the description's 'by id or metadata.slug' merely restates the same precedence rule. No format or fallback nuance is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Identifies the exact resource ('One Stripe product') and the two lookup keys (id, metadata.slug), plus the fields returned. It reads as a lookup despite omitting an explicit verb, and the singular 'One product' contrasts with the sibling stripe_search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The id-or-slug keys imply a direct-lookup use case, but the description never says when to prefer this over stripe_search_products or how a missing product is signaled. The agent must infer the routing decision from the parameters alone.
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 categoriesCRead-onlyIdempotentInspect
Distinct metadata.category values in the site's Stripe catalog, with product counts and an image.
| Name | Required | Description | Default |
|---|---|---|---|
| siteId | No | Site id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description does add value beyond that by disclosing the return shape (category values with product counts and an image) and the fact that categories are derived from product metadata rather than a separate Stripe entity — a non-obvious detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no padding, but it is a sentence fragment rather than a front-loaded verb statement, which costs clarity for the same word count. Nothing is wasted, but nothing is framed either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with rich annotations and no output schema, the description covers the essentials: what is returned and where it comes from. It stops short of explaining how categories are populated or what an empty catalog yields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (siteId) exists and schema coverage is 100%, so the schema fully documents it and the baseline of 3 applies. The phrase 'the site's Stripe catalog' weakly implies site scoping but adds no format or default guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (distinct metadata.category values in the site's Stripe catalog) but is a noun phrase with no verb, so the agent must infer that this is a listing operation. It does not distinguish itself from siblings like stripe_search_products or stripe_get_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite (e.g. Stripe must be connected via stripe_connect), and no mention of the sibling product tools as alternatives. The agent is left to infer the context entirely.
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 productsBRead-onlyIdempotentInspect
Search the site's live Stripe products (id, title, price, image, metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | alpha | price_asc | price_desc | newest | oldest (applied client-side). | |
| limit | No | Default 50. | |
| query | No | Matches name/description; omit to list all. | |
| siteId | No | Site id. | |
| category | No | metadata.category exact match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds that results are live Stripe products and lists returned fields, but it does not describe pagination, rate limits, auth requirements, or search behavior beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence with the core action and returned fields front-loaded. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Input parameters are fully described by the schema, annotations cover safety and idempotency, and the description lists return fields despite there being no output schema. It is complete enough to call correctly, though it omits routing guidance relative to sibling Stripe tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the input schema. The description mentions returned fields but adds no input-parameter semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching the site's live Stripe products. It also names the returned fields, making the purpose clear. However, it does not distinguish this tool from nearby siblings such as stripe_get_product or 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention stripe_get_product, stripe_list_categories, or refresh_products, and it does not state exclusions or prerequisites.
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 pairingsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| options | Yes | 3 options: { name, description?, styleGuide: { headingFontFamily, bodyFontFamily, accentFontFamily?, radiusBox?, shadowStyle? }, palette? }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the annotations by stating 'Does NOT change the site' and naming the follow-up mutation tool, so the agent understands the read-then-apply flow. It leaves one gap: with no output schema, it never says how the user's choice comes back (returned value vs. later read), which matters for a 'show for the user to pick' tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the non-mutating constraint front-loaded before the follow-up instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, non-mutating presentation tool this covers intent, side-effect profile, and the follow-up step. The only missing piece is the return/selection behavior, which the description must carry since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the options schema already spells out the nested styleGuide fields, so the schema does the heavy lifting. The description adds only the 'heading + body Google Fonts' framing, and its fixed '3 pairings' conflicts mildly with the schema's maxItems of 10 and with the optional palette/accentFontFamily fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'Show 3 font pairings (heading + body Google Fonts)'. It also disambiguates from the mutation path by naming set_theme as the tool that actually applies a pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the workflow position explicit — present options to the user, then apply the pick separately with set_theme. It stops short of saying when *not* to call it (e.g. when the site's fonts are already decided) or how it relates to the sibling suggest_palettes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_palettesSuggest palettesARead-onlyIdempotentInspect
Show 3 palette options for the user to pick from. Does NOT change the site; the chosen palette is applied separately with set_theme.
| Name | Required | Description | Default |
|---|---|---|---|
| options | Yes | 3 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces the key behavioral point that this is non-mutating and that application happens separately, though it does not discuss return/display behavior beyond the core action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the action and followed by the crucial non-mutation caveat. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one fully described parameter and no output schema, this is complete. It covers the purpose, the non-mutation behavior, and the follow-up tool for applying a selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents the options array, palette structure, and expected color role names. The description adds little parameter detail beyond saying there are 3 palette options, so the schema is doing the semantic work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: show 3 palette options for the user to pick from. It clearly distinguishes itself from set_theme, which applies the chosen palette separately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says this does NOT change the site and that the chosen palette is applied with set_theme. That gives a clear when-to-use and which-alternative rule without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_collectionSync collectionADestructiveIdempotentInspect
Read an app-fed collection's source again now (rows the source dropped are removed). Stripe products: refresh_products.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| slug | Yes | Collection slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint=true and idempotentHint=true, and the description earns credit by explaining what the destruction means concretely: rows the source dropped are removed. It doesn't disclose permissions requirements or what the call returns (e.g., counts of added/removed rows), which would complete the picture 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler; the destructive side effect is stated parenthetically right after the action, and the sibling pointer comes last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description says nothing about what a successful sync returns or how failures (e.g., the app not connected) manifest. For a destructive, open-world operation this is an adequate but not complete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both id and slug documented in the schema itself. The description adds no parameter-level meaning beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: re-read the source of an app-fed collection, plus the side effect of dropping removed rows. It differentiates from refresh_products by scoping that tool to Stripe products, though it doesn't distinguish itself from collection siblings like import_collection_csv or list_collection_rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Stripe products: refresh_products' line gives an explicit alternative for one case, which is real routing guidance. It lacks explicit when-to-use criteria for the core case (e.g., when to sync versus re-importing via import_collection_csv), so it stops short of full coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_siteUnpublish siteCDestructiveIdempotentInspect
Take the site offline.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. |
TDQS
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.
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.
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.
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.
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.
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 rowADestructiveIdempotentInspect
Partially update one row by rowId; omitted fields keep their values.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| data | Yes | Field key → value. | |
| slug | Yes | Collection slug. | |
| rowId | Yes | Mongo _id of the row. |
TDQS
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.
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.
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.
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.
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.
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 schemaADestructiveIdempotentInspect
Change a collection's fields or member gates. schema replaces all fields (get_collection first). requiredPlans gates every row. To lock single rows: add a text field keyed requiredPlans, write comma-separated plan slugs on those rows; non-members get them minus memberFields, with locked: true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| slug | Yes | Collection slug. | |
| schema | No | Full field list; replaces the old one. | |
| memberFields | No | Fields hidden on locked rows. | |
| requiredPlans | No | Plan slugs whose members alone see the rows; [] clears. | |
| requiresCustomerLogin | No | Signed-in visitors only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and idempotent=true, and the description reinforces the destructive nature by stating 'schema replaces all fields'. It further discloses non-obvious behavior: gated rows return to non-members minus memberFields with locked:true. It doesn't cover permissions or rollback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then prerequisites, then the gating recipe. Dense but every sentence carries semantics; the final locking sentence is terse and slightly cryptic but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the key destructive consequence and the gating mechanics an agent must know. Missing only auth/permission context and confirmation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: the requiredPlans/memberFields interplay, the locked-row visibility rule, and comma-separated slug syntax for row-level gating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Change a collection's fields or member gates', and it distinguishes collection-schema-level edits from the sibling update_collection_row / create_collection_row tools by scoping itself to fields and gates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call get_collection first before replacing the schema, and explains the row-locking workflow as an alternative to whole-collection gating. It does not name sibling tools directly, so it falls just 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.
update_orderUpdate orderADestructiveInspect
Act on an order. Moves money on the site's own Stripe account: only for an order and amount the owner asked about. refund, approve, charge_balance, hold_deposit, keep_deposit need confirmAmount = the amount that moves (minor units); without it the tool says the amount to ask the owner about. unbook reopens the dates and never refunds.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Site id. | |
| action | Yes | ||
| amount | No | Minor units. refund: part (omit for all that's left). keep_deposit: required. | |
| carrier | No | ship. | |
| orderId | Yes | From list_orders. | |
| tracking | No | ship. | |
| notifyBuyer | No | ship: email the buyer. | |
| confirmAmount | No | The amount that moves, in minor units, as the owner agreed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true, non-idempotent, openWorld, so the bar is lower, yet the description adds genuine context beyond them: which actions move real money on the owner's Stripe account, the confirmation gate required for five of them, and the cross-action side effect that unbook reopens dates without refunding. It says nothing about reversibility, failure modes, or what non-money actions like decline or send_balance_link actually do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the money-moving scope and then the confirmAmount rule, with no filler. The phrasing is telegraphic enough ("the tool says the amount to ask the owner about") that it reads more like compressed shorthand than polished guidance, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 14-action, 8-parameter money tool with no output schema, the description covers the highest-risk surface: the Stripe account it charges, the owner-confirmation requirement, and the unbook side effect. The remaining actions are largely self-explanatory and their parameters are schema-documented, though the description never says what a successful call returns or how a partial refund behaves at the order level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the schema already documents id, orderId, amount, confirmAmount, carrier, tracking and notifyBuyer; the description's added meaning is the mapping of which actions require confirmAmount, which is useful but narrow. The bulk of its parameter information duplicates what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Act on an order" is a soft verb, but the description immediately names the domain and effect (moves money on the site's own Stripe account) and enumerates the money-moving actions, which distinguishes it from read siblings like get_order and list_orders. It stops short of stating that this is the single mutation endpoint for all order state changes, leaving the full action surface inferable only from the enum.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit operating constraint — only for an order and amount the owner asked about — plus a concrete fallback: without confirmAmount the tool returns the amount to ask the owner about. That is real when-to-use/when-not guidance, but it never points to an alternative tool (e.g. get_order to inspect state first), so the alternative routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageUpdate pageADestructiveIdempotentInspect
Update a page record: name (changes the slug), SEO, home/404/hidden flags, pathPattern, and policy: a password, who may open it (access conditions and what a denied visitor gets), a body class, per-page CSS variable overrides. Head code and hiding the header/footer are edits to the page file. list_pages({ pageId }) shows a page's current policy. Takes effect for visitors on publish. Guide: get_style_reference({ topic: "pages" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| seo | No | Per-page SEO fields to set. | |
| name | No | New name; changes the slug. | |
| pageId | Yes | Page id from list_pages. | |
| policy | No | Page policy; each key merges, and "" or [] clears it. password: text (stored hashed, never shown back). access: condition groups, OR'd, [{ logic: "all"|"any", conditions: [{ type: "auth", key: "status", operator: "equals", value: "logged-in" }] }]. failAction + redirectUrl | fallbackPath: what a denied visitor gets. bodyClass: classes for <body>. themeOverrides: [{ varName: "primary", value: "oklch(...)" }] CSS variables for this page. | |
| isHidden | No | Hidden pages aren't reachable by URL. | |
| is404Page | No | Make it the 404 page. | |
| isHomePage | No | Make it home (unsets the current one). | |
| pathPattern | No | URL tail AFTER the page's own slug, for detail pages. Segments: literal or `:param`, no leading slash: `:slug` on page "Car" serves /car/<slug>. Read captures as `request.params.<name>`. Empty string clears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds a genuinely important trait not in the annotations: changes take effect for visitors only on publish, so a destructive edit is staged rather than immediately live. Also notes password is stored hashed and never shown back and that policy keys merge with ""/[] clearing, complementing the destructiveHint/idempotentHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the editable field list, then supporting pointers (list_pages, publish semantics, style guide). Telegraphic and dense, but nearly every clause carries information; a slightly more explicit sentence on the page-file exclusion would help readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter nested mutation tool with destructive semantics, the description covers scope, staging-on-publish behavior, inspection path, and where adjacent edits belong. Safety profile is already carried by annotations and field detail by the schema, so remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter and nested field thoroughly; the description largely restates the same fields at a summary level. Its grouping of policy sub-keys is convenient for scanning but adds little new meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (page record) and enumerates the exact editable surfaces: name/slug, SEO, home/404/hidden flags, pathPattern, and policy. An agent can distinguish it immediately from add_page, delete_page, and outline_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names list_pages({ pageId }) as the way to inspect current policy before changing it, and routes to get_style_reference({ topic: "pages" }) for guidance. It also implicitly excludes head code and header/footer hiding by saying those are page-file edits, though it does not name edit_site_file explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_siteUpdate siteADestructiveIdempotentInspect
Set the site's name, title, description, ogImage, ogVideo, indexing, AI crawlers, timezone, language or mount origin/key — immediate, no publish. title/description/og*: fallbacks for pages without their own seo. "" clears. Details: get_style_reference({ topic: "site" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| name | No | URL slug (subdomain): lowercase letters, digits, hyphens. | |
| title | No | Fallback <title>. | |
| ogImage | No | https URL, 1200×630. | |
| ogVideo | No | MP4 URL. | |
| language | No | <html lang> tag: "uk", "pt-BR"… "" = en. | |
| timezone | No | The business's IANA zone, e.g. "America/Los_Angeles". Liquid dates (date, time_tag), {{ year }}, {{ site.timezone }} and the times in notification emails use it. "" = UTC. | |
| crawlMode | No | public = indexed. noindex = viewable by link, kept out of search (a client copy not yet on its domain). private_preview = noindex + robots.txt Disallow. | |
| description | No | Fallback meta description. | |
| mountOrigin | No | Origin of the Next.js app serving it via @pagehub/next, e.g. "https://app.example.com". | |
| rotateMountKey | No | true issues a new mount key (shown once), voiding the old one. | |
| blockAiCrawlers | No | true blocks AI crawlers in robots.txt and turns off /llms.txt; search engines unaffected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior beyond the annotations: changes take effect immediately without a publish step, and "" clears a field — a useful confirmation of the destructiveHint=true profile. It also explains the fallback semantics of title/description/og*. It does not spell out the consequence of rotating the mount key (the schema does), so it stops short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the field list comes first, then the two key behavioral rules, then a pointer to the reference tool. Telegraphic phrasing ('"" clears') is efficient rather than sloppy, though the middle clauses are packed tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, no output schema, and annotations already declaring the mutation profile, the description covers the critical surprises (immediacy, clearing, fallbacks). It never states that a site id is needed to target the record, which is a notable gap given the schema marks zero required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does add meaning the schema doesn't fully convey — that title/description/og* act as fallbacks for pages lacking their own SEO, and that an empty string clears rather than sets — but most parameters are still only explained in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Set') plus an enumerated list of the site-level fields it mutates, which separates it from page-level tools like update_page and from publish_site ('immediate, no publish'). The field list reads partly like a schema echo, but the resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'immediate, no publish' implies this is for pre-publish configuration changes, and it routes to get_style_reference({ topic: "site" }) for details, which is real routing value. However, no explicit when-not-to-use is given (e.g. vs. create_site or set_favicon/set_portal for individual settings), leaving the agent to infer boundaries.
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 emailBDestructiveIdempotentInspect
Save a site email's subject, preheader, Liquid source, or reset: true. Rejects unknown objects, a missing required part and elements inboxes can't show.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| kind | Yes | See list_site_emails. | |
| reset | No | Restore the default email. | |
| source | No | Whole Liquid source. | |
| subject | No | ≤200 chars; empty = default. | |
| preheader | No | Inbox preview text, ≤200 chars; empty = default. |
TDQS
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 real value beyond that by disclosing failure modes — unknown objects, missing required parts, and markup inboxes can't render are rejected — plus the default-restoring semantics of empty subject/preheader. It stops short of saying what state reset destroys or what a successful call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the writable fields listed before the validation caveat, so no sentence is wasted. The phrasing 'or reset: true' is slightly compressed and reads as schema leakage rather than prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive six-parameter mutation with no output schema, the definition covers inputs and rejection cases but omits what a successful call returns and whether partial updates are permitted (omitted fields untouched vs. cleared). Adjacent tools like preview_site_email, which a careful agent would want to know about, go unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented, including the enum's pointer to list_site_emails and the 200-char limits. The description reinforces which fields are the writable surface and that reset is a boolean toggle, but adds no syntax or precedence detail (e.g. what happens if reset and source are sent together). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Save) and resource (site email) and enumerates the mutable surface: subject, preheader, Liquid source, or reset. An agent can distinguish it from get_site_email, preview_site_email and list_site_emails without opening a schema, though it doesn't name 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to call get_site_email or list_site_emails first, or when reset is preferable to supplying a new source. The only usage-adjacent content is a list of rejection conditions, which constrains the call rather than explaining when to make it.
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; video/audio/pdf/zip go to R2. Returns a mediaId: {{ '' | file_url }} works in an , , or a collection url/media field (images: {{ '' | image_url: width: 800 }}). Web files: fileUrl. dataBase64 is a last resort (~3MB cap; pass mimeType for non-images).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| fileUrl | No | Public URL of the original file — no resize params. | |
| private | No | Store privately for set_download (any type; no public url). Needs filePath. | |
| filename | No | Filename hint. | |
| mimeType | No | Required with dataBase64 for non-images, e.g. video/mp4, application/pdf. | |
| dataBase64 | No | Base64 of a real file's bytes, never base64 you write out (it arrives cut off). ~3MB cap; prefer imageUrl. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only, non-idempotent, open-world, non-destructive; the description adds the meaningful behavior — where bytes are stored, what identifier comes back, and the base64 size ceiling. The `private`/set_download path is left to the schema and the phrase 'plan-allowed' is undefined, which keeps this from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and routing, then moves to the return value and per-input guidance. Dense but nearly every clause carries information; the inline template expressions are the only noisy part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on return-value duty by naming both `mediaId` and `fileUrl` and showing where each is usable. What remains thin is the `private`/set_download workflow and the meaning of 'plan-allowed', neither of which is spelled out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, and the description adds usable meaning on top: `fileUrl` is for the original unresized file, `dataBase64` is a fallback with a cap, `mimeType` pairs with base64 for non-images. The mismatched 'imageUrl' reference is the one blemish.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ('Upload any plan-allowed file') plus a concrete storage-routing rule (images→CDN, video/audio/pdf/zip→R2) and the returned handle. It is distinguishable in substance from the sibling upload_image, but it never names that sibling, so an agent must infer which tool to pick for images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real selection guidance among inputs: use `fileUrl` for web files, `dataBase64` only as a last resort with a ~3MB cap and a required mimeType for non-images. It stops short of stating when to prefer upload_image or set_download instead, and 'prefer imageUrl' references a parameter name that does not exist in the schema (the field is `fileUrl`).
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: write it as {{ '' | image_url: width: 800 }} (a URL) or {{ '' | image_url: width: 800 | image_tag: alt: '…' }} (an ; image_tag takes a URL, never a bare id). Web images: imageUrl. dataBase64 has a ~3MB cap and is costly in tokens. More: get_style_reference({ topic: "media" }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| filename | No | Filename hint. | |
| imageUrl | No | Public URL of the ORIGINAL full-size image — no ?w= / h= / q= resize params. | |
| mimeType | No | With dataBase64 (default image/jpeg). | |
| dataBase64 | No | Base64 of a real file's bytes, never base64 you write out (it arrives cut off). ~3MB cap; prefer imageUrl. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/open-world/non-idempotent profile, and the description adds genuinely new context beyond them: the mediaId return contract, the ~3MB base64 cap, the token cost, and the caveat that hand-written base64 arrives truncated. It stops short of stating side effects on the media library or whether a repeat upload duplicates an asset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the return contract and the input preference. Dense and mostly waste-free, though the Liquid template fragments are compressed enough that an agent must parse them carefully to extract the actual rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description proactively explains the return value and how to use it, and it covers the base64-vs-URL tradeoff. The main remaining gap is the absence of any disambiguation from upload_file, the closest sibling for a 5-param write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds decision-level meaning the schema lacks: which input path to prefer (imageUrl over dataBase64 for web images) and the constraint that image_tag consumes a URL, never a bare id. This clarifies authoring practice rather than just restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload an image to the site's media library') and describes the return value (mediaId) plus how to consume it. However it never distinguishes itself from the sibling upload_file (generic file upload) or find_image, which an agent could easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real guidance on the imageUrl vs dataBase64 choice ('Web images: imageUrl', 3MB cap, costly in tokens) and points to get_style_reference for the media topic. But this is parameter-choice guidance, not tool-selection guidance: nothing says when to use upload_image rather than upload_file or find_image.
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 classesARead-onlyIdempotentInspect
Check a button class string for variant conflicts and token misuse; optionally auto-fix it.
| Name | Required | Description | Default |
|---|---|---|---|
| autoFix | No | Return fixed classes/modifiers (default true). | |
| className | Yes | Button class string. | |
| intentVariant | No | primary | outline | ghost. | |
| activeModifiers | No | Current modifiers, e.g. ["btn-neon"]. | |
| allowCustomClasses | No | false = hardcoded colors are errors, not warnings (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description usefully clarifies that 'auto-fix' means returning fixed classes/modifiers rather than mutating anything, but it does not explain error-vs-warning semantics (which the allowCustomClasses param implies exist) or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the core check front-loaded and the optional auto-fix trailing after a semicolon. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of saying what comes back, and it does not — an agent cannot tell whether it receives a boolean, a list of violations, or the fixed class string, nor how warnings differ from errors. For a validation tool whose whole value is the report, that is a real gap despite complete annotations and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; all five parameters are already documented in the schema, including the intentVariant options and the allowCustomClasses error/warning distinction. The description only echoes autoFix and intentVariant at a high level, adding little beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (check/validate) plus a precise resource (button class string) and the two defect classes it looks for (variant conflicts, token misuse), plus the optional auto-fix. It is clearly distinguishable from a generic audit tool, though it never names its closest sibling, generate_button_classes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is the tool to call when it already has a class string that needs checking. There is no explicit guidance on when to prefer this over generate_button_classes, no prerequisites, and no note on when auto-fix should be turned off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_site_fileWrite site fileADestructiveIdempotentInspect
Create or replace a whole file of an HTML-first site. Replacing needs baseVersion from read_site_file; prefer edit_site_file for changes. A new pages/.liquid also creates its page. A site's JavaScript is a file assets/<name>.js (lowercase, flat), linked with .
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Site id. | |
| path | Yes | ||
| text | Yes | ||
| baseVersion | No | Omit only for a new file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds real value on top: full-file replacement semantics, the baseVersion optimistic-concurrency requirement, and the side effect that writing a new pages/<slug>.liquid also creates the page. It doesn't say what happens to concurrent edits beyond baseVersion or whether changes go 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core behavior, then layers the prerequisite, the alternative, and path conventions. The JavaScript/asset_url sentence is useful but dense and slightly divorced from the main point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 4-parameter write tool with no output schema, the description covers the side effects, prerequisites, and path formats an agent needs. It could still mention size limits or whether a publish step is required, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (path and text are undocumented), and the description compensates by giving concrete path conventions (pages/<slug>.liquid, assets/<name>.js) and by spelling out the baseVersion rule. The meaning of 'text' as whole-file content is only implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create or replace') and resource ('a whole file of an HTML-first site'), and explicitly contrasts itself with read_site_file and edit_site_file, so an agent can distinguish it from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the prerequisite for replacement (baseVersion from read_site_file) and directs the agent to edit_site_file for smaller changes, giving both when-to-use and when-to-use-an-alternative.
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.
10 tool updates
- Added
connect_app - Added
get_calendar - Added
get_order - Added
list_apps - Added
list_orders - Added
remove_calendar_link - Added
set_dates - Added
share_calendar_link - Added
sync_collection - Added
update_order
6 tool updates
- Changed
get_site_email2 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Email kind from list_site_emails."New value: +"See list_site_emails." - changed
Input schema / properties / kind / enumPrevious value: -[ - "order_receipt", - "subscription_welcome", - "order_shipped", - "gift_card_gifted", - "gift_card_self", - "customer_login", - "download_delivery", - "download_update" -]New value: +[ + "order_receipt", + "subscription_welcome", + "order_shipped", + "booking_confirmed", + "booking_requested", + "booking_declined", + "booking_balance", + "booking_deposit", + "booking_deposit_link", + "booking_agreement", + "booking_agreement_sign", + "booking_abandoned", + "gift_card_gifted", + "gift_card_self", + "customer_login", + "download_delivery", + "download_update" +]
- Added
list_promo_codes - Changed
preview_site_email2 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Email kind from list_site_emails."New value: +"See list_site_emails." - changed
Input schema / properties / kind / enumPrevious value: -[ - "order_receipt", - "subscription_welcome", - "order_shipped", - "gift_card_gifted", - "gift_card_self", - "customer_login", - "download_delivery", - "download_update" -]New value: +[ + "order_receipt", + "subscription_welcome", + "order_shipped", + "booking_confirmed", + "booking_requested", + "booking_declined", + "booking_balance", + "booking_deposit", + "booking_deposit_link", + "booking_agreement", + "booking_agreement_sign", + "booking_abandoned", + "gift_card_gifted", + "gift_card_self", + "customer_login", + "download_delivery", + "download_update" +]
- Changed
set_integrations1 field changed- added
Input schema / properties / privacyAdded value: +{ + "description": "See the integrations guide.", + "type": "object" +}
- Added
set_promo_code - Changed
update_site_email3 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Email kind from list_site_emails."New value: +"See list_site_emails." - changed
Input schema / properties / kind / enumPrevious value: -[ - "order_receipt", - "subscription_welcome", - "order_shipped", - "gift_card_gifted", - "gift_card_self", - "customer_login", - "download_delivery", - "download_update" -]New value: +[ + "order_receipt", + "subscription_welcome", + "order_shipped", + "booking_confirmed", + "booking_requested", + "booking_declined", + "booking_balance", + "booking_deposit", + "booking_deposit_link", + "booking_agreement", + "booking_agreement_sign", + "booking_abandoned", + "gift_card_gifted", + "gift_card_self", + "customer_login", + "download_delivery", + "download_update" +] - changed
Input schema / properties / source / descriptionPrevious value: -"The whole Liquid source, as get_site_email returns it."New value: +"Whole Liquid source."
1 tool update
- Changed
create_site2 fields changed- changed
Input schema / properties / description / maxLengthPrevious value: -16384New value: +160 - changed
Input schema / properties / title / maxLengthPrevious value: -512New value: +60
1 tool update
- Changed
list_templates1 field changed- changed
Input schema / properties / category / descriptionPrevious value: -"Filter by category (e.g. \"landing-page\", \"portfolio\")."New value: +"Filter by category (e.g. \"legal\", \"portfolio\")."
2 tool updates
- Changed
update_page1 field changed- added
Input schema / properties / seo / properties / ogVideoAdded value: +{ + "maxLength": 2048, + "type": "string" +}
- Changed
update_site1 field changed- added
Input schema / properties / ogVideoAdded value: +{ + "description": "MP4 URL.", + "maxLength": 2048, + "type": "string" +}
1 tool update
- Changed
set_integrations16 fields changed- added
Input schema / properties / crispAdded value: +{ + "description": "Crisp website id (chat).", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / fathomAdded value: +{ + "description": "Fathom site id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / hotjarAdded value: +{ + "description": "Hotjar site id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / hubspotChatAdded value: +{ + "description": "HubSpot hub id (chat).", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / intercomAdded value: +{ + "description": "Intercom app id (chat).", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / intercomRegionAdded value: +{ + "description": "us, eu or au. Default us.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / linkedinInsightAdded value: +{ + "description": "LinkedIn partner id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / microsoftClarityAdded value: +{ + "description": "Clarity project id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / pinterestTagAdded value: +{ + "description": "Pinterest Tag id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / plausibleAdded value: +{ + "description": "Plausible id (after /js/pa-).", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / plausibleHostAdded value: +{ + "description": "Self-hosted Plausible server.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / tawkAdded value: +{ + "description": "tawk.to propertyId/widgetId (chat).", + "maxLength": 256, + "type": "string" +} - added
Input schema / properties / tidioAdded value: +{ + "description": "Tidio public key (chat).", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / tiktokPixelAdded value: +{ + "description": "TikTok Pixel id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / umamiAdded value: +{ + "description": "Umami website id.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / umamiHostAdded value: +{ + "description": "Self-hosted Umami server.", + "maxLength": 128, + "type": "string" +}
1 tool update
- Changed
create_collection1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"{ type: 'manual' } (default) | airtable | csv-upload | google-sheet | webhook-feed | external-db."New value: +"{ type: 'manual' } (default) | airtable | csv-upload | google-sheet | webhook-feed | external-db | hospitable."
2 tool updates
- Changed
upload_file1 field changed- changed
Input schema / properties / dataBase64 / descriptionPrevious value: -"Base64 or data URL. Last resort: ~3MB cap."New value: +"Base64 of a real file's bytes, never base64 you write out (it arrives cut off). ~3MB cap; prefer imageUrl."
- Changed
upload_image1 field changed- changed
Input schema / properties / dataBase64 / descriptionPrevious value: -"Base64 or data URL. Last resort: ~3MB cap."New value: +"Base64 of a real file's bytes, never base64 you write out (it arrives cut off). ~3MB cap; prefer imageUrl."
22 tool updates
- Changed
edit_site_file3 fields changed- added
Input schema / properties / edits / items / properties / insertAfterAdded value: +{ + "description": "Instead of oldText: anchor text (once in the file); newText goes right after it.", + "maxLength": 200000, + "type": "string" +} - added
Input schema / properties / edits / items / properties / insertBeforeAdded value: +{ + "description": "Instead of oldText: newText goes right before this anchor.", + "maxLength": 200000, + "type": "string" +} - changed
Input schema / properties / edits / items / requiredPrevious value: -[ - "oldText", - "newText" -]New value: +[ + "newText" +]
- Changed
edit_site_files7 fields changed- added
Input schema / properties / files / items / properties / edits / items / properties / insertAfterAdded value: +{ + "description": "Instead of oldText: anchor text (once in the file); newText goes right after it.", + "maxLength": 200000, + "type": "string" +} - added
Input schema / properties / files / items / properties / edits / items / properties / insertBeforeAdded value: +{ + "description": "Instead of oldText: newText goes right before this anchor.", + "maxLength": 200000, + "type": "string" +} - changed
Input schema / properties / files / items / properties / edits / items / requiredPrevious value: -[ - "oldText", - "newText" -]New value: +[ + "newText" +] - added
Input schema / properties / files / items / properties / nameAdded value: +{ + "description": "Name of the page a new pages/ file creates (default from the file name).", + "maxLength": 512, + "type": "string" +} - added
Input schema / properties / files / items / properties / seoAdded value: +{ + "description": "SEO of that page, as add_page's seo.", + "type": "object" +} - added
Input schema / properties / files / items / properties / textAdded value: +{ + "description": "A new file's whole text, instead of edits.", + "maxLength": 2000000, + "type": "string" +} - changed
Input schema / properties / files / items / requiredPrevious value: -[ - "path", - "edits" -]New value: +[ + "path" +]
- Changed
get_style_reference1 field changed- changed
Input schema / properties / topic / enumPrevious value: -[ - "design", - "accessibility", - "domains", - "blocks", - "editing", - "theme", - "pages", - "site", - "media", - "integrations", - "animation", - "liquid" -]New value: +[ + "design", + "accessibility", + "domains", + "blocks", + "editing", + "theme", + "pages", + "site", + "media", + "integrations", + "animation", + "collections", + "members", + "downloads", + "chat", + "redirects", + "emails", + "liquid", + "liquid-lists", + "liquid-state", + "liquid-interactions", + "liquid-motion", + "liquid-forms", + "liquid-maps", + "liquid-data", + "liquid-sections" +]
- Changed
import_site2 fields changed- added
Input schema / properties / pagesAdded value: +{ + "description": "Archive paths of the pages to import (e.g. about.html), when the plan's page limit can't take them all. The home page is always included; the limit still applies, in this order.", + "items": { + "maxLength": 512, + "type": "string" + }, + "maxItems": 2000, + "type": "array" +} - added
Input schema / properties / restOfAdded value: +{ + "description": "importId of a capped import: adds the pages it left out to that same site. Needs a plan that takes more pages (get_import_status says when).", + "maxLength": 64, + "type": "string" +}
- Added
list_form_submissions - Added
list_form_webhooks - Changed
list_pages1 field changed- added
Input schema / properties / pageIdAdded value: +{ + "description": "Show one page's settings.", + "maxLength": 256, + "type": "string" +}
- Added
list_review_threads - Changed
list_site_files1 field changed- added
Input schema / properties / globAdded value: +{ + "description": "Only paths matching, e.g. partials/*.liquid or **/*.css.", + "maxLength": 200, + "type": "string" +}
- Added
list_site_history - Added
outline_page - Changed
read_site_file2 fields changed- added
Input schema / properties / pathsAdded value: +{ + "description": "Several files at once.", + "items": { + "properties": { + "endLine": { + "type": "number" + }, + "path": { + "maxLength": 512, + "type": "string" + }, + "startLine": { + "type": "number" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "type": "array" +} - removed
Input schema / requiredRemoved value: -[ - "path" -]
- Added
reply_review_thread - Added
resend_form_webhook - Added
restore_site_revision - Changed
search_site_files3 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Lines around each hit (0-5).", + "type": "number" +} - added
Input schema / properties / globAdded value: +{ + "description": "Only paths matching, e.g. **/*.liquid.", + "maxLength": 200, + "type": "string" +} - added
Input schema / properties / regexAdded value: +{ + "description": "query is a JavaScript regex, case-insensitive.", + "type": "boolean" +}
- Added
set_collection_webhook - Added
set_form_webhook_secret - Changed
set_theme2 fields changed- added
Input schema / properties / breakpointsAdded value: +{ + "description": "Responsive widths in px for the whole site (sm, md, lg, xl, 2xl; Tailwind's are 640, 768, 1024, 1280, 1536): { md: 800, lg: 1100 }. What sm:/md:/lg: classes switch at, in the published site.", + "properties": { + "2xl": { + "type": "number" + }, + "lg": { + "type": "number" + }, + "md": { + "type": "number" + }, + "sm": { + "type": "number" + }, + "xl": { + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / typographyAdded value: +{ + "description": "Type scale tokens, merged by name over the ones fonts made: [{ name: \"Heading\", fontSize: \"3rem\", lineHeight: \"1.1\", letterSpacing: \"-0.02em\", fontWeight: \"700\", textTransform: \"none\" }]. Each field becomes --heading-font-size etc.; the `ph-heading` / `ph-body` classes read them.", + "items": { + "properties": { + "fontFamily": { + "description": "Family.", + "maxLength": 128, + "type": "string" + }, + "fontSize": { + "description": "CSS size, e.g. 2.5rem or clamp(2rem, 5vw, 3.5rem).", + "maxLength": 128, + "type": "string" + }, + "fontWeight": { + "description": "100-900.", + "maxLength": 16, + "type": "string" + }, + "letterSpacing": { + "description": "CSS length.", + "maxLength": 32, + "type": "string" + }, + "lineHeight": { + "description": "Unitless or CSS length.", + "maxLength": 32, + "type": "string" + }, + "name": { + "description": "Token name: Heading, Body, or your own.", + "maxLength": 40, + "type": "string" + }, + "textTransform": { + "description": "none, uppercase, …", + "maxLength": 32, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" +}
- Changed
update_page1 field changed- added
Input schema / properties / policyAdded value: +{ + "description": "Page policy; each key merges, and \"\" or [] clears it. password: text (stored hashed, never shown back). access: condition groups, OR'd, [{ logic: \"all\"|\"any\", conditions: [{ type: \"auth\", key: \"status\", operator: \"equals\", value: \"logged-in\" }] }]. failAction + redirectUrl | fallbackPath: what a denied visitor gets. bodyClass: classes for <body>. themeOverrides: [{ varName: \"primary\", value: \"oklch(...)\" }] CSS variables for this page.", + "properties": { + "access": { + "description": "Condition groups; [] removes the gate.", + "items": { + "type": "object" + }, + "type": "array" + }, + "bodyClass": { + "description": "Extra classes on <body> for this page.", + "maxLength": 1024, + "type": "string" + }, + "failAction": { + "description": "What a denied visitor gets.", + "enum": [ + "redirect", + "show-page", + "" + ], + "maxLength": 16, + "type": "string" + }, + "fallbackPath": { + "description": "Path of the page to show instead (failAction show-page), e.g. /login.", + "maxLength": 512, + "type": "string" + }, + "password": { + "description": "Page password; \"\" removes it.", + "maxLength": 200, + "type": "string" + }, + "redirectUrl": { + "description": "Where to send a denied visitor (failAction redirect).", + "maxLength": 2048, + "type": "string" + }, + "themeOverrides": { + "description": "Per-page CSS variables.", + "items": { + "properties": { + "value": { + "description": "CSS value.", + "maxLength": 256, + "type": "string" + }, + "varName": { + "description": "Variable name, with or without --.", + "maxLength": 64, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
update_site1 field changed- changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA zone for notification emails, e.g. \"America/Los_Angeles\". \"\" = UTC."New value: +"The business's IANA zone, e.g. \"America/Los_Angeles\". Liquid dates (date, time_tag), {{ year }}, {{ site.timezone }} and the times in notification emails use it. \"\" = UTC."
- Changed
validate_button_classes1 field changed- changed
Input schema / properties / className / descriptionPrevious value: -"Button className."New value: +"Button class string."
36 tool updates
- Removed
add_nodes - Changed
add_page3 fields changed- removed
Input schema / properties / positionRemoved value: -{ - "description": "Index among ROOT's children (default: before the footer).", - "type": "number" -} - added
Input schema / properties / textAdded value: +{ + "description": "The page's HTML + Liquid (required).", + "maxLength": 2000000, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "name" -]New value: +[ + "name", + "text" +]
- Changed
apply_kit_block9 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Exact page text to insert after.", + "maxLength": 2000, + "type": "string" +} - added
Input schema / properties / beforeAdded value: +{ + "description": "Exact page text to insert before.", + "maxLength": 2000, + "type": "string" +} - removed
Input schema / properties / contentOverridesRemoved value: -{ - "description": "JSON 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\" }] }.", - "maxLength": 65536, - "type": "string" -} - changed
Input schema / properties / position / descriptionPrevious value: -"Index among the page's sections (default: end)."New value: +"0 = top of the page body (default: end)." - removed
Input schema / properties / propOverridesRemoved value: -{ - "description": "JSON object: displayName → { className, replaceClassName?, props }. className merges unless replaceClassName: true. Arrays for repeated names.", - "maxLength": 65536, - "type": "string" -} - removed
Input schema / properties / sectionContainerIdRemoved value: -{ - "description": "Existing empty section to fill (skeleton fills). Omit otherwise.", - "maxLength": 256, - "type": "string" -} - changed
Input schema / properties / slug / descriptionPrevious value: -"Block slug from search_blocks. Not with sourceNodeId."New value: +"Block slug from search_blocks." - removed
Input schema / properties / sourceNodeIdRemoved value: -{ - "description": "Page section on this site to deep-clone with fresh ids. Page target only.", - "maxLength": 256, - "type": "string" -} - removed
Input schema / properties / targetRemoved value: -{ - "description": "page (default) | header (replaces hdr_root) | footer (replaces ftr_root).", - "enum": [ - "page", - "header", - "footer" - ], - "maxLength": 128, - "type": "string" -}
- Changed
audit_accessibility1 field changed- changed
Input schema / properties / templateSlug / descriptionPrevious value: -"Template to audit instead of a site."New value: +"Template to audit instead of a site; pageId is then the page's url path, e.g. \"/about\"."
- Changed
audit_seo1 field changed- changed
Input schema / properties / templateSlug / descriptionPrevious value: -"Template to audit instead of a site."New value: +"Template to audit instead of a site; pageId is then the page's url path, e.g. \"/about\"."
- Added
delete_component - Removed
delete_node - Added
delete_site_file - Added
edit_site_file - Added
edit_site_files - Changed
get_block1 field changed- added
Input schema / properties / idAdded value: +{ + "description": "Site id.", + "maxLength": 256, + "type": "string" +}
- Removed
get_component_schema - Removed
get_site_node - Changed
get_style_reference1 field changed- changed
Input schema / properties / topic / enumPrevious value: -[ - "design", - "accessibility", - "domains", - "blocks", - "editing", - "theme", - "pages", - "site", - "media", - "integrations", - "animation", - "section-tree" -]New value: +[ + "design", + "accessibility", + "domains", + "blocks", + "editing", + "theme", + "pages", + "site", + "media", + "integrations", + "animation", + "liquid" +]
- Removed
insert_node - Removed
list_block_nodes - Changed
list_blocks1 field changed- added
Input schema / properties / idAdded value: +{ + "description": "Site id.", + "maxLength": 256, + "type": "string" +}
- Added
list_components - Added
list_site_files - Removed
list_site_nodes - Removed
move_node - Removed
patch_site_bulk - Removed
patch_site_node - Changed
publish_site1 field changed- removed
Input schema / properties / staticRemoved value: -{ - "description": "true = static-export renderer, false = React renderer.", - "type": "boolean" -}
- Changed
pull_template1 field changed- added
Input schema / properties / pathAdded value: +{ + "description": "One file's text.", + "maxLength": 512, + "type": "string" +}
- Added
read_site_file - Added
rename_component - Changed
search_blocks1 field changed- added
Input schema / properties / idAdded value: +{ + "description": "Site id.", + "maxLength": 256, + "type": "string" +}
- Added
search_site_files - Removed
search_site_nodes - Removed
select_template - Changed
set_theme9 fields changed- removed
Input schema / properties / animationsRemoved 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" -} - removed
Input schema / properties / buildStyleRemoved value: -{ - "description": "Vibe override for block filtering. Rarely needed — preset sets it.", - "enum": [ - "aurora", - "brutalist", - "corporate", - "editorial", - "minimal", - "organic" - ], - "maxLength": 128, - "type": "string" -} - removed
Input schema / properties / demoRemoved value: -{ - "description": "Demo URL.", - "maxLength": 2048, - "type": "string" -} - removed
Input schema / properties / descriptionRemoved value: -{ - "description": "Short description (≤75 chars).", - "maxLength": 16384, - "type": "string" -} - removed
Input schema / properties / hiddenRemoved value: -{ - "description": "Hide from the public gallery.", - "type": "boolean" -} - removed
Input schema / properties / homePageRemoved value: -{ - "description": "Home page flag (default true).", - "type": "boolean" -} - removed
Input schema / properties / jsonLdRemoved value: -{ - "description": "Schema.org JSON-LD object; {{company.*}} variables work inside it.", - "type": "object" -} - removed
Input schema / properties / removeAnimationsRemoved value: -{ - "description": "Keys to delete from theme.animations.", - "items": { - "maxLength": 45, - "type": "string" - }, - "maxItems": 50, - "type": "array" -} - removed
Input schema / properties / titleRemoved value: -{ - "description": "Title.", - "maxLength": 512, - "type": "string" -}
- Changed
update_page7 fields changed- removed
Input schema / properties / bodyClassRemoved value: -{ - "description": "Classes on <body> for this page. \"\" clears.", - "maxLength": 4096, - "type": "string" -} - removed
Input schema / properties / footerCodeRemoved value: -{ - "description": "Raw HTML at the end of this page's <body>, after its content. \"\" clears. Site-wide: ROOT.props.inject.footer.", - "maxLength": 65536, - "type": "string" -} - removed
Input schema / properties / headCodeRemoved value: -{ - "description": "Raw HTML in this page's <head>. \"\" clears. Site-wide: ROOT.props.inject.head.", - "maxLength": 65536, - "type": "string" -} - removed
Input schema / properties / hideChromeRemoved value: -{ - "description": "Hide all ROOT-level chrome (header, footer, sticky bars, drawers).", - "type": "boolean" -} - removed
Input schema / properties / hideFooterRemoved value: -{ - "description": "Hide the site footer here.", - "type": "boolean" -} - removed
Input schema / properties / hideHeaderRemoved value: -{ - "description": "Hide the site header here.", - "type": "boolean" -} - changed
Input schema / properties / pathPattern / descriptionPrevious value: -"URL tail AFTER the page's own slug, for detail pages. Segments: literal or `:param`, no leading slash: `:slug` on page \"Car\" serves /car/<slug>. Read captures in a Data node's dataSource as `{{params.<name>}}`. Empty string clears."New value: +"URL tail AFTER the page's own slug, for detail pages. Segments: literal or `:param`, no leading slash: `:slug` on page \"Car\" serves /car/<slug>. Read captures as `request.params.<name>`. Empty string clears."
- Changed
update_site1 field changed- changed
Input schema / properties / mountOrigin / descriptionPrevious value: -"Origin of the Next.js app serving it via @pagehub/next, e.g. \"https://app.example.com\". Needs publish_site static: true."New value: +"Origin of the Next.js app serving it via @pagehub/next, e.g. \"https://app.example.com\"."
- Changed
update_site_email2 fields changed- removed
Input schema / properties / nodesRemoved value: -{ - "description": "Full flat node map (ROOT + every node).", - "type": "object" -} - added
Input schema / properties / sourceAdded value: +{ + "description": "The whole Liquid source, as get_site_email returns it.", + "maxLength": 200000, + "type": "string" +}
- Added
write_site_file
16 tool updates
- Changed
add_nodes1 field changed- changed
Input schema / properties / modifiers / descriptionPrevious value: -"{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only needed when className uses shortcut modifier names. See get_style_reference({ topic: \"editing\" })."New value: +"{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only for shortcut modifier names in className. See get_style_reference({ topic: \"editing\" })."
- Changed
get_site_node2 fields changed- added
Input schema / properties / fullAdded value: +{ + "description": "Shorten nothing.", + "type": "boolean" +} - added
Input schema / properties / propAdded value: +{ + "description": "Dot path, e.g. inject.head.", + "maxLength": 256, + "type": "string" +}
- Changed
import_collection_csv2 fields changed- added
Input schema / properties / mediaIdAdded value: +{ + "description": "An uploaded CSV/TSV/XLSX file's mediaId (the agent gets this for attached files). Use this instead of csv when the data was uploaded — never retype rows.", + "maxLength": 100, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "slug", - "csv" -]New value: +[ + "slug" +]
- Changed
insert_node1 field changed- changed
Input schema / properties / modifiers / descriptionPrevious value: -"{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only needed when className uses shortcut modifier names. See get_style_reference({ topic: \"editing\" })."New value: +"{ Text: [{ name, classes, requires }], … } upserted into ROOT.props.modifiers. Only for shortcut modifier names in className. See get_style_reference({ topic: \"editing\" })."
- Added
list_members - Added
list_membership_plans - Changed
list_site_nodes2 fields changed- added
Input schema / properties / depthAdded value: +{ + "description": "Levels to expand.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / pageIdAdded value: +{ + "description": "Page id (or any node id) to list; other pages fold.", + "maxLength": 256, + "type": "string" +}
- Added
remove_member - Changed
set_download2 fields changed- added
Input schema / properties / accessAdded value: +{ + "description": "Members-only: members true = any plan; plans = one of these. members false = public.", + "properties": { + "members": { + "type": "boolean" + }, + "plans": { + "items": { + "maxLength": 48, + "type": "string" + }, + "maxItems": 50, + "type": "array" + } + }, + "type": "object" +} - changed
Input schema / properties / mediaId / descriptionPrevious value: -"From upload_file({ private: true })."New value: +"An uploaded file's mediaId (upload_file or a chat attachment); not images."
- Added
set_member - Added
set_membership_plan - Changed
set_site_chat1 field changed- added
Input schema / properties / dailyCreditCapAdded value: +{ + "description": "Credits per UTC day for all chats; 0 pauses chat. Omit for the plan default.", + "minimum": 0, + "type": "integer" +}
- Changed
set_theme1 field changed- added
Input schema / properties / daisyuiAdded value: +{ + "description": "DaisyUI component classes (btn, card…). Default on; HTML imports off.", + "type": "boolean" +}
- Changed
update_collection_schema4 fields changed- added
Input schema / properties / memberFieldsAdded value: +{ + "description": "Fields hidden on locked rows.", + "items": { + "maxLength": 64, + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / requiredPlansAdded value: +{ + "description": "Plan slugs whose members alone see the rows; [] clears.", + "items": { + "maxLength": 48, + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / requiresCustomerLoginAdded value: +{ + "description": "Signed-in visitors only.", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "slug", - "schema" -]New value: +[ + "slug" +]
- Changed
update_page7 fields changed- changed
Input schema / properties / bodyClass / descriptionPrevious value: -"Classes on <body> for this page. Empty string clears."New value: +"Classes on <body> for this page. \"\" clears." - added
Input schema / properties / footerCodeAdded value: +{ + "description": "Raw HTML at the end of this page's <body>, after its content. \"\" clears. Site-wide: ROOT.props.inject.footer.", + "maxLength": 65536, + "type": "string" +} - changed
Input schema / properties / headCode / descriptionPrevious value: -"Raw HTML for this page's <head>, server-rendered. Empty string clears. Site-wide: ROOT.props.inject.head."New value: +"Raw HTML in this page's <head>. \"\" clears. Site-wide: ROOT.props.inject.head." - changed
Input schema / properties / hideChrome / descriptionPrevious value: -"Hide ALL ROOT-level chrome (header, footer, sticky bars, drawers) — for ad landing pages."New value: +"Hide all ROOT-level chrome (header, footer, sticky bars, drawers)." - changed
Input schema / properties / hideFooter / descriptionPrevious value: -"Hide the global footer on this page."New value: +"Hide the site footer here." - changed
Input schema / properties / hideHeader / descriptionPrevious value: -"Hide the global header on this page."New value: +"Hide the site header here." - changed
Input schema / properties / pathPattern / descriptionPrevious value: -"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."New value: +"URL tail AFTER the page's own slug, for detail pages. Segments: literal or `:param`, no leading slash: `:slug` on page \"Car\" serves /car/<slug>. Read captures in a Data node's dataSource as `{{params.<name>}}`. Empty string clears."
- Changed
update_site8 fields changed- changed
Input schema / properties / blockAiCrawlers / descriptionPrevious value: -"true blocks known AI crawlers in robots.txt and turns off /llms.txt. Search engines unaffected."New value: +"true blocks AI crawlers in robots.txt and turns off /llms.txt; search engines unaffected." - changed
Input schema / properties / crawlMode / descriptionPrevious value: -"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."New value: +"public = indexed. noindex = viewable by link, kept out of search (a client copy not yet on its domain). private_preview = noindex + robots.txt Disallow." - changed
Input schema / properties / description / descriptionPrevious value: -"Site-wide fallback meta description."New value: +"Fallback meta description." - added
Input schema / properties / languageAdded value: +{ + "description": "<html lang> tag: \"uk\", \"pt-BR\"… \"\" = en.", + "maxLength": 35, + "type": "string" +} - changed
Input schema / properties / mountOrigin / descriptionPrevious value: -"Origin of the Next.js app serving this site via @pagehub/next, e.g. \"https://app.example.com\". Needs publish_site static: true."New value: +"Origin of the Next.js app serving it via @pagehub/next, e.g. \"https://app.example.com\". Needs publish_site static: true." - changed
Input schema / properties / rotateMountKey / descriptionPrevious value: -"true issues a new mount key (returned once) and invalidates the old one."New value: +"true issues a new mount key (shown once), voiding the old one." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone for form notification emails, e.g. \"America/Los_Angeles\". Empty string = UTC."New value: +"IANA zone for notification emails, e.g. \"America/Los_Angeles\". \"\" = UTC." - changed
Input schema / properties / title / descriptionPrevious value: -"Site-wide fallback <title>."New value: +"Fallback <title>."
2 tool updates
- Changed
patch_site_node2 fields changed- changed
Input schema / properties / propsPatch / descriptionPrevious value: -"Non-class props (text, src, href, alt, tagName, action, root, …)."New value: +"Non-class props. Objects merge: { dataSource: { filter } } keeps provider." - changed
Input schema / properties / unsetProps / descriptionPrevious value: -"Dotted prop paths to delete, e.g. \"seo.jsonLd\"."New value: +"Keys or dotted paths to delete, e.g. \"dataSource.filter\"."
- Added
refresh_products
3 tool updates
- Changed
get_site_email1 field changed- changed
Input schema / properties / kind / enumPrevious 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" +]
- Changed
preview_site_email1 field changed- changed
Input schema / properties / kind / enumPrevious 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" +]
- Changed
update_site_email1 field changed- changed
Input schema / properties / kind / enumPrevious 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" +]
2 tool updates
- Added
get_import_status - Added
import_site
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables 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.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.