Pixelesq
Server Details
Build and manage Pixelesq websites from a conversation: pages, sections, content, SEO, analytics.
- Status
- Healthy
- Uptime
- 22.9% over 54 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- pixelesq/pixelesq-skills
- GitHub Stars
- 1
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 70 tools
Most tools target distinct resources and actions, and the descriptions clarify boundaries between similar operations such as save_page_content, save_section_content, and insert_section. A few areas overlap heavily (page/section content editing, upload_asset vs upload_image, get_page vs get_page_content), but the guidance generally prevents misselection.
Tool names consistently use snake_case verb_noun patterns like create_page, get_collection, save_section_content, and publish_entry. Minor variations such as get_all_page_statuses are still predictable and readable.
At 70 tools, the surface is far beyond a reasonable set and places a heavy selection burden on the agent. Even for a broad site-building platform, the count is extreme and several tools are near-duplicates.
The surface covers pages, sections, partials, collections, entries, forms, redirects, assets, themes, analytics, and publishing workflows very thoroughly. Some lifecycle gaps remain, such as deletion or creation for collections, forms, and partials, but most core workflows are supported.
Available Tools
70 toolsbind_section_to_collectionBind section to collectionADestructiveInspect
Connect a Uislice section on a page to a collection (datasource), so the section's items render entries from that collection instead of static placeholder content.
This mirrors the "Datasource" panel in the Apollo editor. It is a separate operation from save_section_content / save_page_content / save_partial_content; those tools do NOT change a section's collection binding. Use it after inserting a list-style section (cards, grid, listing) that should show collection entries.
A binding has two parts: the collection, and a mapping that says which entry fields fill which item fields. Pass the mapping as connection, keyed by the section's list path, for example {"ctx.items": {"dataSourcePath": "entries", "fields": {"title.value": "<%=entryName%>", "desc.value": "<%=summary%>", "media[0].src": "<%=image.src%>"}}}: entryName is the entry's name and the other names are the collection's fields (get_collection lists them). Without connection, a section that already has a mapping keeps it; otherwise a mapping is built from the section's items and the collection's fields (the entry name as the item title, a text field as the description), and the result says what it mapped. When no mapping can be built the result carries a warning and the section keeps showing its own items until one is sent.
Mechanics: looks up the section by sectionId (id or logicalId), validates that section.type === "Uislice", and applies one SET_COLLECTION operation with the mapping: both land on the page's draft under the revision lock, checked against the section's current anchor, and the draft is forked from the published head first when needed.
Errors: returns a clear error if the section is not found, the section is a Partial (binding partials is not supported here), the collection does not exist, or the section changed while the request was in flight (BASE_VERSION_MISMATCH: read the page again and retry with a new idempotencyKey).
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID containing the section | |
| projectId | Yes | The project ID | |
| sectionId | Yes | The section's id or logicalId (from get_page_content) | |
| connection | No | The mapping, keyed by the section path it fills, e.g. {"ctx.items": {"dataSourcePath": "entries", "fields": {"title.value": "<%=entryName%>"}}}. Omit to keep the section's mapping or have one built. | |
| collectionId | Yes | The collection ID to connect | |
| idempotencyKey | No | Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses concrete mechanics: validates section.type === "Uislice", applies a single SET_COLLECTION operation, writes to the page draft under the revision lock, checks the section anchor, and forks the draft from the published head when needed. It also explains mapping fallback behavior, warning behavior when no mapping can be built, and specific error cases including BASE_VERSION_MISMATCH retry guidance with a new idempotencyKey.
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 purpose and exclusion, then organized into mapping, mechanics, and errors. It is long and dense, but the complexity of the nested mapping and revision-lock behavior justifies most of the length; a few sentences could still be tightened.
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 with no output schema, nested parameters, and existing safety annotations, the description covers validation, draft/revision behavior, mapping fallback, result reporting, and the key error/retry paths. An agent has enough information to invoke it correctly and interpret failures.
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 goes further by explaining the connection mapping structure, the special entryName placeholder, where other field names come from (get_collection), and what happens when connection is omitted. The remaining parameters are largely already covered by the schema, so this is meaningful added value but not a complete re-specification of all six parameters.
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 precise verb+resource: connecting a Uislice section on a page to a collection so its items render collection entries. It explicitly distinguishes this from save_section_content / save_page_content / save_partial_content, which do not change collection bindings, and explains the static-placeholder 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?
It gives a clear usage condition — use after inserting a list-style section (cards, grid, listing) that should show collection entries — and explicitly excludes save_* tools from this job. It does not mention the sibling unbind_section_from_collection as the inverse operation, nor does it state when binding should be avoided beyond the partial-section error later in the text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_collectionCreate collectionADestructiveInspect
Create a new content collection. A new collection starts with the built-in Name and Slug fields; call update_collection_schema with this result's updatedAt to define the rest of the field schema (text/html/number/checkbox/date/image/icon/option/reference fields), keeping those two in the list. Entries feed listings and sections bound to the collection. hasPages=true (default false) also gives every published entry its own page, laid out by an entry-page template that starts EMPTY and can only be designed in the dashboard: until someone designs and publishes it there, published entry pages show no body. A retry makes a second collection: if the answer was lost, look for the slug with list_collections before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Collection display name | |
| slug | Yes | Collection URL slug (used in entry-page paths if hasPages) | |
| hasPages | No | Give every entry its own page, laid out by an entry-page template that starts empty and is designed in the dashboard. Default false. | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true but say nothing about why; the description explains the real hazard — a retry creates a duplicate collection, so verify with list_collections first. It also discloses the post-create state (only Name/Slug fields present) and the notable side effect of hasPages: entry pages render with no body until a dashboard-designed template is published. This is context 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 core action, then follow-up, then the hasPages caveat, then retry safety — a sensible priority order with no filler. It is dense and slightly long for one paragraph, and 'Entries feed listings and sections bound to the collection' is background rather than actionable, but the remaining sentences all carry operational weight.
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, so the description carries the burden of describing what comes back (the new collection's fields and updatedAt) and how to proceed, which it does. For a mutating, non-idempotent create with a non-obvious downstream template dependency, the description covers the prerequisites, the side effects, and the failure 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% and the description largely restates schema text — the hasPages explanation ('starts empty and is designed in the dashboard') and the slug's entry-page role both already appear in the parameter descriptions. The only genuine addition is the instruction to keep Name and Slug in the field list on the follow-up call, which is guidance about a sibling call rather than about this tool's parameters.
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 new content collection') and immediately distinguishes it from sibling update_collection_schema by describing what this tool does and does not create (only Name and Slug fields exist afterward). An agent can differentiate it from create_entry, create_page, and create_form 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?
Gives explicit sequencing guidance ('call update_collection_schema with this result's updatedAt to define the rest of the field schema') and explicit recovery guidance ('look for the slug with list_collections before trying again'). It names the alternative tool for each situation, which is exactly the when/when-not routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_entryCreate entryADestructiveInspect
Create a new entry in a collection. Content is VALIDATED against the collection's field schema (call get_collection first to see field names, types, and which fields are lists). Invalid shapes are rejected with warnings. Value shapes match save_entry_content: list: true fields take arrays; reference fields take entry ID strings (an array of IDs when list: true); date fields take YYYY-MM-DD, or an ISO timestamp with a numeric UTC offset when the field's config.time is true. The entry's name and slug are the top-level arguments, never content: keys for the built-in name and slug fields are refused. A retry makes a second entry: if the answer was lost, look for the slug with list_entries before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entry name | |
| slug | No | URL slug for the entry (lowercase letters, numbers and hyphens). Derived from the name when omitted; a taken slug gets a suffix. Pass it explicitly when the collection still uses a legacy text field named slug, so the copy in content matches. | |
| content | No | Entry content as key-value pairs matching the collection schema | |
| projectId | Yes | The project ID | |
| collectionId | Yes | The collection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds real behavioral context beyond that: content is validated against the collection schema with warnings on rejection, built-in name/slug keys in content are refused, and a retry creates a second entry (non-idempotent). That non-idempotency warning is exactly the kind of risk 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?
Purpose is front-loaded and every sentence carries payload (validation, value shapes, name/slug exclusion, retry hazard). It is dense and slightly cramped into a single block, but no sentence is 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 5-param mutation tool with no output schema, the definition covers validation behavior, slug derivation (via schema), and duplicate-creation hazard well. The one gap is that it never says what a successful call returns (e.g., the new entry ID), which an agent would need for follow-up calls.
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 would be 3, but the description adds substantial semantics the schema lacks: 'content' is documented only as free-form key-value pairs, and the description specifies value shapes (arrays for list:true, entry ID strings for references, YYYY-MM-DD or offset-timestamp for dates) and that name/slug live at top level. Minor deduction only because the reference/date rules depend on external 'config.time' context.
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 new entry in a collection') and implicitly separates itself from update_entry and save_entry_content by emphasizing 'new'. An agent can identify the operation and its scope immediately.
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 explicit sequencing ('call get_collection first') and an explicit recovery path ('look for the slug with list_entries before trying again'), plus a clear exclusion ('keys for the built-in name and slug fields are refused'). This is when-to-use guidance an agent can act on without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_formCreate formADestructiveInspect
Create a new form in a project. The form is on no page yet, so the live site does not change; a form section shows it by referencing its id (form.formId). For a scored form (quiz, scorecard, calculator), options carry points in their field's optionScores, keyed by option id: in score mode the points are summed and scoring.results shows the card whose scoreRange (inclusive, whole numbers) holds the total, scoring.gate before_results with gateFields asks for contact details before the result shows, calculator.display writes the total as a formatted amount such as $9.6M a year, calculator.stats adds up to 4 figures worked out from the total (such as a 3-year value or a payback time), and calculator.parts with each option's optionParts shows the visitor's own split of the total as bars. The schema is checked first: duplicate field names or option values, points keyed to options that do not exist, points in the wrong shape for resultType, and gateFields naming missing fields are refused; score range gaps and overlaps come back as warnings. A retry makes a second form: if the answer was lost, look for it with list_forms before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Form name shown in the dashboard | |
| projectId | Yes | The project ID | |
| formSchema | Yes | Fields, groups, displayMode, scoring and delivery settings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the non-effect on the live site, the pre-write validation that refuses duplicate field names, orphaned optionScores and bad gateFields, that score ranges produce warnings rather than refusal, and that a retry duplicates the form. This is exactly the side-effect and failure-mode detail an agent needs for a destructiveHint 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?
Purpose is front-loaded and nearly every sentence carries information the agent cannot get elsewhere. The weakness is form: one long run-on paragraph with no bullets, which makes the scoring and calculator rules hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a large, deeply nested creation schema with no output schema, the description covers the critical semantics: validation refusals vs warnings, scoring modes, calculator breakdowns, and the retry hazard. An agent has enough to construct a valid call and anticipate failure.
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 on top: how optionScores are keyed by option id, how score mode sums points into scoreRange cards, what calculator.display/stats/parts do, and how optionParts must sum to each option's points. It is not a restatement of schema text, though it still leaves many nested objects (gatedAsset, autoresponder, conversational) 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?
States a specific verb and resource ('Create a new form in a project') and immediately clarifies scope: the form is not on a page yet, so the live site does not change. That distinguishes it from update_form_schema, insert_section and create_page without the agent 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?
Gives clear conditional guidance for the risky case: 'A retry makes a second form: if the answer was lost, look for it with list_forms before trying again', naming the alternative tool and condition. It does not explicitly compare against update_form_schema, so an agent must infer that editing an existing form belongs elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageCreate pageADestructiveInspect
Create a new draft page in a project. The page is empty and not on the live site until it has sections and is published. If the address is already taken a suffix is added, so read the slug in the result. Pass an idempotencyKey to make a retry safe: the same key, project and address name one page, so a call whose answer was lost can be repeated without making a second page. Without a key, look for the address with list_pages before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Page name | |
| slug | Yes | The page's address as a path that starts with a slash, e.g. /pricing. A missing leading slash is added. | |
| language | No | Language code | en |
| projectId | Yes | The project ID | |
| idempotencyKey | No | Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=true; the description adds the real behavioral payload: the page starts empty and unpublished, slug collisions silently get a suffix (so results must be re-read), and idempotency is scoped to the key+project+address tuple. These are side effects 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?
Four tight sentences, each carrying distinct information: lifecycle state, collision behavior, retry safety, and the no-key fallback. Creation scope is front-loaded and 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 mutation tool with no output schema, the description covers lifecycle, slug rewriting, and retry semantics thoroughly. It references 'the slug in the result' without saying what else the result contains, a minor gap given no output schema exists to fill it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description still earns credit by adding composite-key semantics for idempotencyKey ('the same key, project and address name one page') that the schema's per-field description does not spell out, plus slug-suffix behavior that changes how the returned slug must be handled.
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 new draft page in a project') plus a lifecycle qualifier (draft, not live) that separates it from create_entry/create_collection and from publish_page. An agent can identify the tool 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 concrete conditional guidance: pass idempotencyKey for safe retries, and without one, verify the address with list_pages before retrying. It does not discuss sibling alternatives for page creation itself, but for a sole-purpose create tool the retry routing is the relevant decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_redirectCreate redirectADestructiveInspect
Create a URL redirect. Redirects have no draft: the rule applies on the live site without a publish, usually within minutes, and a source that matches a live page replaces that page for visitors. A source path can have only one active redirect (list_redirects shows the ones in use), and a redirect that leads back to its own source, directly or through other rules, is refused. A source of / (the home page) or a destination on another site needs confirm: true, sent only after the user agreed. If the answer was lost, check list_redirects for the source path before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source URL path (e.g. /old-page) | |
| confirm | No | Set true only after the user confirmed replacing the home page or sending visitors to another site | |
| permanent | No | Whether this is a permanent (301) or temporary (302) redirect | |
| projectId | Yes | The project ID | |
| description | No | Description of why this redirect exists | |
| destination | Yes | Destination URL path (e.g. /new-page) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive and openWorld behavior, but the description adds substantial context: redirects go live without publishing, usually within minutes, can replace a live page, reject loops, and require confirmation in risky cases. It also covers retry behavior when the answer is lost.
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 core action and then supplies only high-value behavioral constraints. Every sentence earns its place; 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 destructive openWorld mutation with no output schema, it covers timing, side effects, uniqueness conflicts, loop refusal, confirmation requirements, and retry advice. Return shape is not described, but invocation requirements are complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful semantics beyond the schema for source uniqueness and confirm conditions, though it does not explain the permanent or description parameters beyond 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?
States a specific verb and resource: 'Create a URL redirect.' It also names list_redirects for checking existing redirects, making it distinguishable from list/update/delete redirect 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?
Explains key use conditions and refusals: unique active source, no redirect loops, and confirm required for the home page or offsite destinations. It points to list_redirects after a lost answer, but does not explicitly route existing redirects to update_redirect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entryDelete entryADestructiveInspect
Delete a collection entry permanently. A published entry's page goes offline and the entry leaves live listings at once; there is no undo.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | The entry ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the bar is lower, but the description still adds real context: the deletion is permanent, there is no undo, and a published entry's page goes offline and drops out of live listings immediately. It stops short of describing permission requirements or cascade effects on related content.
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, nothing wasted, and the permanence warning plus immediate side effects are front-loaded right after the action statement.
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 and full schema coverage, the description only needs to convey consequence and irreversibility, which it does well. It could be more complete by noting any required prior state or authorization, but nothing an agent needs to invoke it 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 description coverage is 100% and both parameters (entryId, projectId) are documented in the schema, so the baseline of 3 applies. The description adds no syntax, format, or constraint detail beyond what the schema already carries.
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 collection entry permanently' states a specific verb and resource, and 'collection entry' cleanly separates it from the sibling delete_page and delete_redirect tools without needing their 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?
Usage is implied by the destructive verb, and the description usefully notes the immediate effect on live listings, but it never names the alternative (e.g., unpublish_entry) for taking a published entry offline without destroying it, which is the one routing decision an agent faces here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageDelete pageADestructiveInspect
Delete a page permanently. A published page goes offline at once; there is no undo.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered. The description adds real value beyond them: permanence ('no undo') and the immediate side effect on a published page. It omits permission requirements and what happens to child sections/entries.
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, and the irreversible consequence is front-loaded right after the action. Everything written 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?
No output schema exists, so return values needn't be explained, and the annotations carry the destruction signal. For a 2-param delete the description is nearly sufficient; only the unpublish-vs-delete decision and permission/cascade effects are absent.
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?
Both parameters are required and have 100% schema description coverage, so the schema already carries the semantics. The description adds no format, scope, or constraint detail for pageId/projectId, 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: 'Delete a page permanently.' An agent can immediately tell it targets a page. It does not, however, differentiate itself from sibling delete_entry/delete_redirect beyond the resource noun, and gives no route to unpublish_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?
The phrase 'A published page goes offline at once; there is no undo' implies the destructive/irreversible branch of usage, but never names unpublish_page as the reversible alternative. When-to-use is inferable but not stated, so this sits at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_redirectDelete redirectADestructiveInspect
Delete a URL redirect. The live site stops redirecting without a publish, usually within minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID | |
| redirectId | Yes | The redirect ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, and the description adds genuinely useful behavior beyond them: the live site stops redirecting without a publish, usually within minutes. That timing and no-publish effect is exactly the operational context a destructive tool needs. It stops short of stating whether the deletion is recoverable or what permissions are required.
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 waste; the action comes first and the behavioral consequence follows. 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 two-param destructive call with no output schema and annotations already covering the safety profile, the description supplies the missing piece (immediate unpublish-free effect). Only the reversibility/permission story is absent, a minor gap against the otherwise complete 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% (both UUID params are documented), so the schema carries the parameter burden. The description adds no syntax, format, or scoping detail beyond it, which is the expected baseline when coverage is complete.
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 URL redirect') that unambiguously separates it from create_redirect, update_redirect, and list_redirects. An agent knows exactly what object is being acted on 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?
No when-to-use or when-not-to-use guidance is given, and no alternative is named (e.g., update_redirect to disable rather than remove). The single-target delete is implied by the verb, but nothing addresses the delete-vs-modify decision an agent actually faces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_entryDuplicate entryADestructiveInspect
Duplicate an existing collection entry with all its content. A retry makes another copy: if the answer was lost, look for the copy with list_entries before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | The entry ID to duplicate | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds the key non-obvious trait: this operation is not idempotent, each retry makes another copy. That is real value beyond the annotations, though it doesn't state what the response contains (e.g., new entry ID) beyond implying the copy is findable via list_entries.
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; the core action is front-loaded and the retry hazard follows as the secondary but important caution. No wasted words.
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 implies the returned copy is retrievable via list_entries while covering the mutation's non-idempotency risk. Slightly short on what exactly gets copied or the return shape, but adequate for a two-parameter mutation with annotation coverage.
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 both parameters are documented in the schema, so the description needn't repeat them. It adds no syntax or scoping detail (e.g., cross-project behavior) 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 and resource ('Duplicate an existing collection entry with all its content'), which immediately separates it from create_entry (new entry) and duplicate_page (pages). An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns that retries create additional copies and directs the agent to list_entries to recover a lost answer, naming the sibling tool. It does not cover when to duplicate vs. re-create from scratch, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_pageDuplicate pageADestructiveInspect
Duplicate an existing page with all its sections and content. A retry makes another copy: if the answer to a duplicate was lost, look for the copy with list_pages before trying again.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID to duplicate | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a destructive write with no open-world reach, so the bar is lower, and the description adds genuinely non-obvious behavior: the copy is deep (sections plus content) and the operation is non-idempotent. It stops short of saying what the response contains (e.g., whether the new page ID is returned) or where the copy is placed.
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, the operation is stated first and the retry caveat second. Every clause earns its place and nothing is repeated from the annotation or 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 two-param mutation with no output schema, the description covers the risky part (non-idempotency and how to recover) and the copy depth. It leaves open what the caller receives back, which matters for a tool whose whole hazard is a lost 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%, with both projectId and pageId documented in the schema itself. The description adds no format, constraint, or scoping detail for either parameter, so the schema carries the whole load and 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?
Uses a specific verb ('Duplicate') with a specific resource ('an existing page') and states the scope of what is copied ('all its sections and content'). The resource noun distinguishes it from duplicate_entry, though it never explicitly contrasts with that sibling or with create_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 concrete retry guidance: a retry makes another copy, so verify with list_pages when the original response was lost. This is real when-to-use guidance aimed at non-idempotency, but it doesn't cover when to duplicate versus build a new page from scratch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageGenerate image with AIADestructiveInspect
Generate image(s) with AI. Requires the project's AI image generation to be enabled (check get_project context.imageGeneration.enabled or get_imagegen_quota first); if generation is disabled, the monthly quota is exhausted, or too many jobs are running concurrently, the tool returns a clear error. START-ONLY: returns { status: 'pending', jobId } immediately; poll get_image_job(jobId) to retrieve the finished assets, then set an asset url as a section media.src. Use this for custom, branded, or illustrative imagery; prefer search_stock_images + upload_asset for real-world photos.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many images to generate (1-4) | |
| prompt | Yes | Description of the image to generate (max 2000 chars) | |
| quality | No | Generation quality | |
| projectId | Yes | The project ID | |
| aspectRatioOverride | No | Aspect ratio override |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only reveal readOnly=false, destructive=true, openWorld=true; the description adds the behavior those hints do not: quota consumption, concurrency limits, clear-error behavior when disabled/exhausted, and the exact immediate return shape { status: 'pending', jobId } with no output schema to convey it. This is substantial context 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?
Front-loaded with the purpose, then prerequisites, return contract, and routing guidance in a logical order; each clause earns its place. It is dense and parenthetical-heavy, which costs a little readability, 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 5-parameter, async, side-effecting tool with no output schema, the description covers prerequisites, error conditions, the immediate return contract, and the required polling follow-up. Nothing an agent needs to invoke and complete the workflow 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 description coverage is 100%, so every parameter (count, prompt, quality, projectId, aspectRatioOverride) is already documented in the schema; the description adds no per-parameter syntax, format, or constraint detail. Baseline 3 is appropriate 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?
States a specific verb+resource ('Generate image(s) with AI') and immediately clarifies the async, start-only nature of the operation. It distinguishes itself from siblings by naming search_stock_images + upload_asset as the alternative for real-world photos, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('custom, branded, or illustrative imagery'), explicit when-not ('real-world photos' → search_stock_images + upload_asset), plus prerequisites to check first (get_project context.imageGeneration.enabled, get_imagegen_quota). The follow-up workflow (poll get_image_job, set url as section media.src) is also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_referral_analyticsGet AI referral analyticsARead-onlyInspect
Get analytics for traffic referred from AI platforms (ChatGPT, Claude, Perplexity, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default: 30) | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the domain scope of the data (AI platforms such as ChatGPT, Claude, Perplexity) but says nothing about attribution logic, aggregation granularity, or behavior when no AI referrals exist. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource scope and the concrete platform examples are the only content and both earn their 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 2-parameter read-only tool with full schema coverage the core is covered, but there is no output schema, so the description could usefully say what metrics/shape come back (sessions, referrers, per-platform breakdown). Without that, an agent knows what to call but not what it will receive.
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 'days' (default 30) and 'projectId' (UUID) are documented in the schema. The description adds no meaning beyond the schema, e.g., the timezone or whether 'days' is calendar or rolling; baseline 3 applies since 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?
States a specific verb and resource ('get analytics for traffic referred from AI platforms') and enumerates the source platforms, so the agent knows exactly what data class this returns. It does not, however, distinguish itself from near-siblings like get_site_analytics or get_search_performance, which cover overlapping analytics territory.
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: an agent can infer this is for AI-referred traffic specifically, but the description gives no when-to-use condition, no prerequisite (e.g., analytics must be connected), and never names get_site_analytics or get_search_performance as the alternative for non-AI traffic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_page_statusesGet index status for all pagesARead-onlyInspect
Get Google Search Console indexing status for all pages in a project, as last synced from Google
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | Why there are no statuses, in place of the list |
| warning | No | Set when the connected Search Console property does not cover the address the site is served at |
| statuses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds a genuinely useful trait beyond the schema: the data is 'as last synced from Google', disclosing that results are a cached snapshot rather than a live query — material for an agent deciding whether to re-check. It omits any prerequisite that a GSC connection must exist, which caps 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?
One sentence with zero waste, front-loaded with the verb and resource, and the scope qualifier follows immediately. Nothing is padded or repeated from 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?
An output schema exists, so return values need no explanation, and the single required parameter is fully documented in the schema. For a simple read-only batch-status tool, the only substantive extra an agent needs — that the data is a sync snapshot — is already stated; the missing GSC-connection prerequisite 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 description coverage is 100% for the single projectId parameter, so the schema already carries the semantics. The phrase 'in a project' confirms the scoping but adds nothing beyond what the schema 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?
States a specific verb and resource (get Google Search Console indexing status for all pages in a project), and the plural 'all pages' implicitly separates it from the singular get_page_index_status sibling. It does not explicitly name that sibling, so the differentiation is inferable 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 explicit when-to-use or when-not-to-use guidance, and no mention of the sibling get_page_index_status for per-page lookups or inspect_url for live inspection. The usage is implied by the scope phrase 'for all pages in a project', which is enough to act on but leaves the agent to infer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionGet collection schemaARead-onlyInspect
Get a collection's schema and field definitions. updatedAt is the value update_collection_schema needs as expectedUpdatedAt. Each field has a type (name/slug/text/html/number/checkbox/date/media/image/icon/option/reference/related, or the legacy select/textarea/email/url) plus list (true = the field holds an ARRAY of that type), to (for reference fields, the target collection id) and config (type-specific settings; for date fields { format, time, timeFormat }, where time: true means values carry a time and a UTC offset). The built-in name and slug types hold the entry's own name and URL slug: they are required, never list, and never part of entry content (get_entry returns them as entry.name and entry.slug; change them with update_entry). ALWAYS check list before writing content: a reference field with list: true takes an array of entry IDs, not a single ID.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID | |
| collectionId | Yes | The collection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, non-destructive, closed-world nature of the tool. The description adds substantial behavioral context beyond that: field type semantics, list/array behavior, reference targets, date config shape, and the special handling of built-in name and slug fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then spends its length on high-value schema semantics needed because there is no output schema. Every sentence provides actionable interpretation or usage guidance, 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?
Given the lack of an output schema, the description carries the return-value burden well by explaining field types, config formats, built-in fields, and the critical `list` distinction. An agent has enough context to call the tool and correctly interpret the result.
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 projectId and collectionId are already documented in the input schema. The description adds no parameter-specific meaning 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 opens with a specific verb and resource: 'Get a collection's schema and field definitions.' It also distinguishes this tool's role from update_collection_schema and get_entry by explaining how updatedAt and name/slug fields are used elsewhere.
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 explains when the result matters, such as passing updatedAt to update_collection_schema and checking `list` before writing content. It stops short of explicitly naming alternatives like list_collections or spelling out when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entryGet entryARead-onlyInspect
Get a collection entry's content and metadata. name and slug are the entry's own fields, not content. draftSlug is a pending address (set through update_entry) that the next publish_entry applies. page carries the live address (page.slug), firstPublishedAt (null when the page was never public) and publishedRevisionId. Use latestRevision.version for save_entry_content, and latestRevision.id plus headAnchor for publish_entry.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | The entry ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely new semantics: firstPublishedAt is null when the page was never public, page.slug is the live address, draftSlug is a pending address. Good added value without contradicting 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 purpose is front-loaded and the remaining sentences are dense with field semantics rather than filler. It is somewhat information-packed, but each clause carries usable meaning, especially given the absence of an output 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?
There is no output schema, so the description must document return values itself, and it does so thoroughly (content vs metadata, draftSlug vs page.slug, firstPublishedAt, publishedRevisionId, latestRevision.version/id, headAnchor). An agent has everything needed to call it and use the result downstream.
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 both required parameters (projectId, entryId), so the schema already carries the input semantics. The description's field discussion concerns return values, not input parameters, so no extra input meaning is added; 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 first sentence states a specific verb+resource (get a collection entry's content and metadata), which clearly separates it from list_entries, get_page, and get_collection. However, it does not explicitly contrast itself against the nearest siblings such as get_page_content or list_entries within the collection 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?
The description routes the agent usefully: it identifies which returned fields feed save_entry_content (latestRevision.version) and publish_entry (latestRevision.id plus headAnchor), and explains that draftSlug is applied by the next publish_entry. It gives clear downstream context but no explicit when-not/alternative clause (e.g. versus list_entries or get_page).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_formGet formARead-onlyInspect
Get one form with its complete schema. Returns fields with their options, option points (optionScores), calculator part amounts (optionParts) and showWhen conditions, groups, scoring (result cards, score ranges, the email gate), calculator settings, delivery settings and updatedAt. Read here before update_form_schema and pass updatedAt as its expectedUpdatedAt.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | The form ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint, destructiveHint=false), so the bar is lower, and the description adds substantial value by enumerating the return contents (fields, optionScores, optionParts, showWhen, scoring, calculator/delivery settings, updatedAt). It also discloses the optimistic-concurrency role of updatedAt, though it does not spell out authorization or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by the return inventory and the workflow instruction. The dense return list is informative rather than padded, though it could be tightened.
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 thoroughly, and the two required params are covered by the schema. Combined with annotations covering safety, an agent has enough to call it correctly, with only minor gaps in error/edge-case 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 description coverage is 100% for both formId and projectId, so the schema already documents the parameters fully. The description adds no syntax or format detail beyond the schema, 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 and resource ('Get one form') and scopes it precisely ('its complete schema'), which cleanly separates it from list_forms and get_form_submissions. An agent can identify this as the single-form read tool 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?
Explicitly tells the agent to 'Read here before update_form_schema' and to pass the returned updatedAt as expectedUpdatedAt, naming the sibling and the sequencing rule. This is actionable when-to-use guidance rather than vague context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_submissionsGet form submissionsARead-onlyInspect
Gets submissions for a form (find the formId via list_forms), newest first. By default (status inbox) spam is left out and each row carries its status: ok, or suspect when the spam filter was unsure (spamReason says why). status ok, suspect or spam lists only that kind; all lists every row. Unfinished submissions (partial: true, saved when a visitor stopped part way through a multi-step form) are left out unless includePartial is true, and pagination.total still counts them. counts holds the form's totals per status, partial rows included: counts.ok is the number of real leads to report. Returns { results: [{ id, submission, createdAt, status, spamReason, partial }], pagination: { offset, limit, total }, counts: { ok, suspect, spam } } where submission is the submitted field values as JSON. Default limit 20. Note: submissions contain user-entered PII.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| formId | Yes | The form ID | |
| offset | No | ||
| status | No | inbox (default) is everything but spam; ok, suspect or spam lists only that kind; all lists every row | inbox |
| projectId | Yes | The project ID | |
| includePartial | No | Also return unfinished submissions (partial: true). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/destructive annotations: explains spam filtering, that rows carry status and spamReason, that partial submissions are hidden by default while pagination.total still counts them, that counts includes partials, and flags that results contain user-entered PII. This is rich behavioral context an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and formId guidance, and every clause earns its place by explaining filtering/count behavior. It is dense with nested parentheticals, which slightly hurts scanability but not correctness.
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?
Despite having no output schema, the description fully specifies the return shape (results, pagination, counts) and field meanings. Combined with the PII warning, an agent has everything needed to call and interpret 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?
Although schema coverage is 67%, the description clarifies the non-obvious semantics: the status enum's effect on filtering, the interaction between includePartial and pagination.total, the meaning of counts.ok, and the default limit of 20. This adds meaningful interpretation beyond the raw 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 ('Gets submissions for a form'), names the sibling (list_forms) that supplies the formId, and specifies ordering (newest first). An agent can identify and scope this tool 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?
Explicitly routes the agent to list_forms to obtain formId, and defines when each status value applies (inbox default excludes spam, ok/suspect/spam list one kind, all lists everything). It also states exactly when to use includePartial to surface unfinished submissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gsc_connection_statusCheck Search Console connectionARead-onlyInspect
Check if Google Search Console is connected to this project, and whether the connected property covers the address the site is served at (propertyCoversSite, with a suggestedProperty when another of the account's properties does)
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by naming propertyCoversSite and suggestedProperty as result concepts, which helps an agent understand what the check evaluates.
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 preface. The parenthetical efficiently explains the suggestedProperty nuance without derailing the main purpose.
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 status check with one well-documented parameter, the description is nearly complete. It explains the key connection and property-coverage concepts, though without an output schema it could be slightly more explicit about the full response shape or not-connected 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 description coverage is 100% for the single projectId parameter, so the schema already carries the parameter documentation. The description only references 'this project' and does not add format, source, or selection 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?
The description states a specific verb and resource: checking whether Google Search Console is connected to a project and whether the connected property covers the site address. It is clearly distinct from sibling analytics and inspection tools such as get_search_performance and inspect_url.
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 connection-status framing, but the description does not explicitly say when to choose this tool over related siblings or what to do if the result is not connected. It also does not mention prerequisites beyond the project context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imagegen_quotaCheck image generation quotaARead-onlyInspect
Check the project's monthly AI image-generation quota before calling generate_image. Returns { used, limit, remaining, plan, unlimited } (remaining is null when unlimited).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read-only, non-open-world query, so the bar is lower; the description still adds the return contract ({ used, limit, remaining, plan, unlimited }) and the key edge case that remaining is null when unlimited. It does not cover freshness/latency or whether the monthly window resets on a fixed date.
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: purpose and the ordering constraint come first, the return shape 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?
With no output schema, the description compensates by enumerating the returned fields and the null-when-unlimited semantics, which is exactly the information an agent needs to interpret the result. Nothing material is missing for a one-parameter read 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% and the single uuid-constrained projectId is fully documented in the schema, so the baseline is 3. The description only implies the quota is project-scoped ('the project's') without adding format or acquisition guidance 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 (check) and resource (project's monthly AI image-generation quota), with clear scope. It is trivially distinguishable from siblings like generate_image and get_image_job 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 positions itself as a pre-flight check: 'before calling generate_image', which routes the agent to the correct sequencing relative to a sibling. It stops short of stating exclusions or failure modes (e.g. what to do if remaining is 0).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_image_jobCheck image generation jobARead-onlyInspect
Poll an AI image-generation job started by generate_image. Returns { status, assets } where status is pending|running|completed|failed; when completed, assets is [{ id, url, description }] and each url is usable directly as a section media.src.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The jobId returned by generate_image | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuine value beyond that by disclosing the status lifecycle (pending|running|completed|failed) and the completed payload shape, which it must since no output schema exists. It omits polling cadence/termination behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core purpose front-loaded and the return-value contract following immediately. 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?
With no output schema and only two fully-documented params, the description correctly assumes the burden of explaining return values and does so completely, including the status enum and completed asset structure. Nothing needed to call or interpret the tool 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 description coverage is 100%, so both jobId and projectId are already documented in the schema. The description only echoes the jobId origin ('started by generate_image') without adding format or constraint detail, 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 ('Poll an AI image-generation job') and explicitly ties it to the originating sibling 'generate_image'. An agent can immediately distinguish this polling tool from generate_image 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 phrase 'started by generate_image' establishes the precondition and the correct context for calling it, and 'Poll' implies repeated invocation. It stops short of explicit when-not guidance or telling the agent to keep polling until a terminal status, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet page detailsCRead-onlyInspect
Get details of a specific page
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that: it doesn't say what fields the 'details' include, whether it errors on missing pages, or how it relates to get_page_content. With annotations carrying the load, the description contributes no incremental 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?
It is a single front-loaded sentence with no filler, which is structurally fine. But the brevity comes at the cost of substance rather than being earned concision, so it sits at adequate rather than strong.
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 no output schema, the description should at minimum clarify what 'details' means and how it differs from get_page_content or get_page_revisions. It leaves both questions open, so an agent choosing among the page-reading siblings is under-informed.
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 both parameters (pageId, projectId) are documented in the schema with UUID formats, so the baseline of 3 applies. The description does not add format, constraint, or relationship information beyond the schema, but it is not required to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb ('Get') and a resource ('details of a specific page'), so the basic purpose is legible. However, 'details' is unspecified, and the description does nothing to distinguish this tool from close siblings like get_page_content, get_page_revisions, get_page_index_status, or list_pages. An agent cannot tell from this text which page-inspection tool returns what.
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 exclusions, and no mention of alternatives, despite the sibling list containing at least four other page-reading tools. The only implicit signal is that both IDs are required, which the schema already states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_contentGet page contentARead-onlyInspect
Get the actual text content of a page's sections (titles, descriptions, CTAs, images, items). Use this to read what's on the page before editing.
By default the result is a compact outline: per section its id, logicalId, name and type, and per uislice its id, type, collectionId and content (ctx), with empty values left out and each icon's svgStr markup replaced by a short reference such as svg:1a2b3c4d. Send such a reference back unchanged and the icon is kept. Layout settings (cfg) are left out: pass mode "full" for every section's cfg, or read one section with get_section_content. latestRevision.version is the lastVersion a save needs, and latestRevision.headAnchor binds a publish to what was reviewed. The text names the page, revision and section ids too.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | outline (default): content without layout settings; full: every field, including cfg and icon markup | outline |
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| slug | No | |
| status | No | |
| latestRevision | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint already marking this as a safe read, the description adds substantial behavioral detail: default outline behavior, omitted cfg fields, icon svgStr replacement with short references, and how references should be sent back unchanged. It also explains latestRevision.version for saves and headAnchor for publish review, which is valuable operational context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then proceeds through output shape, icon references, layout settings, and revision semantics. It is dense and somewhat long, but the detail is relevant for a tool with non-obvious return behavior and does not read as wasteful.
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?
An output schema exists and annotations already cover the safety profile, yet the description still supplies the key content-shape and save/publish semantics an agent needs to call and interpret this tool correctly. Nothing essential appears to be missing for a read tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents projectId, pageId, and mode. The description explains the default outline result and what mode "full" includes, but most of that meaning is already present in the schema's mode description, so it does not add much parameter-specific value beyond 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?
The description gives a specific verb and resource: it gets the actual text content of a page's sections, including titles, descriptions, CTAs, images, and items. It also distinguishes the tool from at least one sibling by directing single-section reads to get_section_content.
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 tool to read what is on the page before editing, and it gives a clear alternative for reading just one section via get_section_content. However, it does not explain when to choose this over other related sibling tools such as get_page or get_partial_content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_index_statusGet page index statusARead-onlyInspect
Get Google Search Console indexing status for a specific page, as last synced from Google. inspect_url checks a URL live.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context those annotations lack: results reflect the last Google sync and may therefore be stale relative to a live check. It doesn't say anything about latency, quota, or what happens when GSC isn't connected.
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 core purpose front-loaded and the disambiguation deferred to the second sentence. Nothing repeats the title or 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 two-required-parameter read tool with full schema coverage and no output schema, the description covers what is needed to select and invoke it correctly, including the key staleness caveat. It would be stronger if it sketched what a returned status contains or noted the GSC-connection prerequisite.
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 projectId and pageId are documented as UUIDs with patterns. The description adds only the implicit notion that pageId identifies 'a specific page' and doesn't explain the project/page relationship or whether a URL could be substituted. Baseline 3 applies when the schema carries the parameter burden.
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 (get) and a precise resource (Google Search Console indexing status for a specific page), with the data provenance made explicit ('as last synced from Google'). It also names inspect_url as the differing sibling, so an agent can distinguish it from both inspect_url and get_all_page_statuses 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?
The clause 'inspect_url checks a URL live' gives a clear routing rule: use this tool for the stored/synced status, inspect_url for a live check. It does not explicitly say when-not to use it, nor does it mention the related bulk sibling get_all_page_statuses, so it stops just short of full alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_revisionsList page revisionsARead-onlyInspect
Get the revision history of a page, newest first. Each revision has its id, version (a content hash, the lastVersion a save takes) and dates; isDraftHead marks the current draft and isPublished the live one. The draft head also lists its saves as [{ number, savedAt }] and its headAnchor: those save numbers are what revert_page_revision_to_version takes to undo recent saves. Edits one person makes within about five minutes of each other share one save number. limit and offset page through long histories.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of revisions to return (1 to 100) | |
| offset | No | Revisions to skip | |
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, closed-world behavior, and the description adds substantial context beyond that: the exact return fields (id, version hash, dates, isDraftHead, isPublished), the draft head's saves and headAnchor, and the five-minute save-grouping rule. This is behavior an agent could not infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and ordering come first, then return-field semantics, then the cross-tool relevance, then pagination. Each sentence contributes new information with no repetition of 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?
There is no output schema, so the description carries the burden of explaining return values, and it does so thoroughly, including field meanings and the unusual save-number grouping. Nothing essential for correctly interpreting the response 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 description coverage is 100%, including explicit descriptions for limit and offset with defaults and bounds, so the baseline is 3. The description's 'limit and offset page through long histories' confirms intent but adds no syntax, range, or format detail the schema does not already provide.
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 ('Get the revision history of a page') plus ordering ('newest first'), and names the sibling it feeds into ('revert_page_revision_to_version'). An agent can distinguish it from revert_page_revision and get_page_content 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?
Explains the key workflow condition: the save numbers returned here are what revert_page_revision_to_version takes to undo recent saves, which tells the agent when to use this tool first. It lacks explicit when-not guidance (e.g., versus get_page_content or get_all_page_statuses), but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partial_contentGet partial contentARead-onlyInspect
Get the content of a partial (header, footer, or other reusable section). A partial is live when publishedRevisionId is set (status PUBLISHED, live true); hasUnpublishedChanges is true when its draft holds edits that are not live yet. By default sections come as a compact outline: ids, types and content (ctx) without layout settings (cfg), empty values left out, and each icon's svgStr markup replaced by a short reference such as svg:1a2b3c4d that a save keeps when it is sent back unchanged. Pass mode "full" for every field. latestRevision.version is the lastVersion save_partial_content needs, latestRevision.headAnchor the anchor publish_partial binds to.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | outline (default): content without layout settings; full: every field, including cfg and icon markup | outline |
| partialId | Yes | The partial ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, the description discloses meaningful behavior: live status via publishedRevisionId, unpublished-change detection via hasUnpublishedChanges, omission of empty values, replacement of icon SVG markup with reusable short references, and the specific latestRevision fields needed by downstream save/publish tools. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by tightly packed but relevant details about status, output compaction, mode selection, and downstream revision fields. There is no filler, and each sentence contributes useful invocation or interpretation 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?
Although there is no output schema, the description explains the returned structure in enough detail for an agent to interpret outline versus full responses, including omitted fields, icon references, and revision metadata. For a read-only get tool with complete parameter coverage, it is sufficiently 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, but the description adds real meaning beyond the schema by explaining the practical effect of mode: outline omits cfg and empty values and compresses icon markup, while full includes every field. ID parameters remain schema-only, which is appropriate given the existing UUID descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the content of a partial (header, footer, or other reusable section).' It also defines what a partial is, which distinguishes it from sibling tools like get_page_content and get_section_content without requiring the schema to be opened.
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 explains the default outline mode versus passing mode "full" for every field, and ties the returned latestRevision fields to save_partial_content and publish_partial. However, it does not explicitly name alternatives such as get_section_content or state when not to use this tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileGet profileARead-onlyInspect
Return the Pixelesq account this connection is signed in as. The id is the Pixelesq user id: unique within Pixelesq, and unchanged across token refresh, reconnection and changes to the name or email.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The Pixelesq user id: unique, and unchanged across token refresh, reconnection and display changes. Never the email. |
| name | No | Display name for the signed-in account |
| No | Email address for display; not used as the identity | |
| nickname | No | A label that tells connected accounts apart |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the returned id is unique and invariant across token refresh, reconnection, and name/email changes — a non-obvious property an agent would otherwise have to discover empirically. It stops short of mentioning auth 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 filler. The primary statement of what is returned comes first, with the id semantics as supporting detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, full annotation coverage, and an output schema, nothing structural is missing. The one thing an agent could not infer — that the id is a stable key — is explicitly documented, which is exactly the gap a description needs to close for an identity 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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description's explanation of what the returned id represents is a bonus but not required for parameter semantics.
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: 'Return the Pixelesq account this connection is signed in as' — an agent knows immediately this is the identity/whoami call, not a data listing. It never names or contrasts a sibling (e.g. get_project, list_projects), so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not, or alternative is given; usage is only implied by the notion of knowing which account is signed in. The second sentence does provide strong guidance on how to use the result (the id is a stable identifier across token refresh, reconnection, and profile edits), but that is consumption guidance, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet project detailsARead-onlyInspect
Get a project's full details: id, name, slug, plan, siteBaseUrl, moduleAccess (the modules the plan includes), settings (templateId; themeId, with get_theme for the theme itself; feature switches including scheduling, growth and sync; syncEnabled; the chatbot), brand/AI context (siteProfile, audienceStrategy, contentGeneration), content counts, and whether AI image generation is enabled at context.imageGeneration.enabled. Check that flag before calling generate_image.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description doesn't need to cover safety. It does add context the annotations can't: the exact shape of the returned payload and the nested path context.imageGeneration.enabled, which is a concrete behavioral detail an agent would otherwise have to discover by trial.
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 core payload description and the actionable generate_image prerequisite are front-loaded before the field enumeration. The settings enumeration is dense but each parenthetical carries real information; the only mild bloat is the long nested clause around settings and syncEnabled.
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 full burden of explaining return values, and it does so thoroughly, including a nested flag path and a cross-tool dependency. It stops short of mentioning error behavior for an invalid or unknown projectId, which keeps it at 4 rather than 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?
There is a single parameter and schema description coverage is 100%, so the schema fully documents projectId as a UUID. The description adds no meaning beyond that (no note on obtaining the ID, e.g. from list_projects), so it lands at 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 opens with a specific verb+resource ("Get a project's full details") and then enumerates exactly which fields come back (id, name, slug, plan, siteBaseUrl, moduleAccess, settings, brand/AI context, content counts). This clearly separates it from list_projects (which lists rather than fetches one) and from get_theme (which the description explicitly defers to for theme 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?
It gives one explicit routing rule: "Check that flag before calling generate_image," and points to get_theme for the theme itself. What's missing is a when-not: nothing says to prefer list_projects when the agent lacks a projectId, so the agent must infer that from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_performanceGet search performanceARead-onlyInspect
Get Google Search Console search performance data (clicks, impressions, CTR, position): totals with the change against the previous period, and the top queries, pages, devices and countries, most clicks first, then most impressions
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period | LAST_28_DAYS |
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| byPage | No | |
| period | No | |
| totals | No | |
| byQuery | No | |
| message | No | Why there is no data, in place of the data |
| warning | No | Set when the connected Search Console property does not cover the address the site is served at |
| byDevice | No | |
| byCountry | No | |
| ctrChange | No | |
| clicksChange | No | |
| positionChange | No | |
| dataFreshnessDate | No | |
| impressionsChange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results include a comparison against the previous period and are sorted most-clicks-first then most-impressions. It stops short of stating what happens when GSC is not connected or when no data 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?
A single dense sentence with the resource front-loaded and the returned dimensions trailing as a list; no filler. The enumerated output facets make it long, but each element carries information an agent would otherwise have to open the output schema to learn.
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 an output schema present and annotations covering safety, the description need not explain return values, and it is adequate for calling the tool. However, in a 60+ tool surface it omits the GSC-connection precondition and project-sourcing step that would let an agent chain correctly from get_gsc_connection_status / list_projects.
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 and the baseline is 3. The phrase 'change against the previous period' loosely gestures at the period parameter, but the description never mentions the period options (7/28/90 days) or the default, so it adds no real semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (Google Search Console search performance data) and enumerates exactly what is returned: totals with period-over-period change plus top queries, pages, devices and countries. This clearly distinguishes it from the broader get_site_analytics and get_ai_referral_analytics siblings 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?
Usage is only implied by the resource name — an agent infers this is the read path for GSC search metrics. There is no explicit 'use this instead of get_site_analytics when...' guidance, and no mention of the apparent prerequisite implied by the get_gsc_connection_status sibling or of where projectId comes from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_section_contentGet section contentARead-onlyInspect
Get a single section's full content and config from a page. Returns the complete section including all uislices with ctx (content) and cfg (layout config), with empty values left out. Use this to inspect one section in isolation before editing, instead of loading the whole page.
Typical flow: call get_page_content (or list_pages) to find the section id, then call get_section_content to read that one section, then call save_section_content to save your edits. When the section draws items from a collection, collectionFed lists those paths: they show the collection's entries and are read-only here.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID | |
| sectionId | Yes | The section's id or logicalId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds genuinely useful behavioral detail beyond them: the return shape (uislices with ctx/cfg, empty values omitted) and the read-only nature of collectionFed paths. It stops short of describing error behavior or size limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and return shape, then the flow, then the collectionFed caveat. Mostly every sentence earns its place, though the collectionFed sentence is slightly tangential for a read tool and could be trimmed.
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 explaining return values and does so reasonably (ctx/cfg, omissions, collectionFed). A mention of pagination or failure modes is missing, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three IDs are documented in the schema itself. The description only adds that sectionId may be a section id 'or logicalId' implicitly via the flow of finding it through get_page_content, which is marginal added value over 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 and resource ('Get a single section's full content and config from a page') and explicitly contrasts with loading the whole page and with sibling tools like get_page_content. An agent can distinguish it from get_partial_content/get_page_content 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 an explicit when-to-use ('inspect one section in isolation before editing, instead of loading the whole page') plus a concrete multi-step flow: get_page_content/list_pages to find the id, this tool to read, save_section_content to write. Alternatives and sequencing are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_section_defaultsGet section defaultsARead-onlyInspect
Get the full default content and config structure for a specific section type. Use this before creating a section to understand its exact data structure. Returns the complete defaults object with ctx (content) and cfg (layout config) that you can modify and pass to save_page_content.
The defaults include properly structured fields. Replace the text values (title.value, desc.value, cta labels/urls, media src/alt, item content) with your generated content while keeping the structure intact.
| Name | Required | Description | Default |
|---|---|---|---|
| sectionType | Yes | The section type name (e.g. 'HeroWithMedia', 'StickyFeatures', 'Faqs') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/safe profile; the description adds valuable behavior detail—the return shape (ctx + cfg), the expected workflow (edit values, keep structure), and how the output feeds save_page_content. It doesn't cover error cases for unknown section types, but the added context is well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return value, then usage. Slightly repetitive in the second paragraph about replacing text values, but every sentence carries practical guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 param, read-only, no output schema) and the description fully explains the return structure and how to use it. Minor gap around invalid section type behavior, but otherwise complete for the agent's needs.
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 already documents sectionType with examples, so the description adds no syntax or format detail for the single parameter. 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 (get default content/config structure for a section type) and clearly distinguishes itself from siblings like list_section_types and save_section_content by naming what it returns (ctx and cfg).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('before creating a section') and ties it to the follow-up action (modify and pass to save_page_content), giving the agent a clear workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_analyticsGet site analyticsBRead-onlyInspect
Get site traffic analytics: visits, page views, bounce rate and visit length with the change against the previous period, visits per day, and the top pages, sources, devices, locations and browsers
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period for analytics | LAST_30_DAYS |
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Visits and page views per day over the period |
| note | No | Which window the top lists cover, when it is not the chosen period |
| counts | No | |
| period | No | |
| topPages | No | |
| topDevices | No | |
| topSources | No | |
| topBrowsers | No | |
| topLocations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety and scope are covered. The description adds the useful behavioral detail that each metric includes a comparison against the previous period, but says nothing about project scoping, empty-data behavior, or cost/latency, which matters for an aggregate-report 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?
A single front-loaded sentence with no filler; the metric inventory is dense but each item is informative. The trailing enumeration is long but earns its place by telling the agent what it 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?
Return shape is covered by an output schema and parameters are fully documented in the schema, so the description need not repeat them. What remains missing is routing guidance relative to the sibling analytics tools, which is the main gap for an otherwise simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the period enum and its default, so the schema carries parameter meaning. The description never mentions the period parameter or how the comparison window derives from it, adding no 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?
Specific verb and resource ('Get site traffic analytics') followed by an enumeration of the exact metrics returned, so an agent knows precisely what data comes back. It does not explicitly contrast with the nearby analytics siblings (get_ai_referral_analytics, get_search_performance), leaving that differentiation to be inferred from the metric names.
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 guidance, no prerequisites, and no mention of alternatives. With three analytics tools in the sibling list, an agent gets no help deciding between traffic analytics, AI referral analytics, and search performance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_themeGet themeARead-onlyInspect
Get the project's active theme (colors, typography, spacing). variables is what the live site renders; hasUnpublishedDraft is true when the theme editor holds staged changes that are not live yet, and draftVariables then carries those staged values.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| variables | No | |
| draftVariables | No | |
| hasUnpublishedDraft | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context: `variables` reflect the live site while `draftVariables` carry staged editor changes, and `hasUnpublishedDraft` signals divergence — this is not derivable 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?
Three clauses, zero waste, front-loaded with the tool's purpose followed immediately by the semantics of the returned fields. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description usefully clarifies the live-vs-staged distinction, which the schema alone would not convey. Given annotations cover safety and the single param is documented, the definition is near-complete; only explicit usage routing is absent.
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 (projectId) with 100% schema description coverage, so the schema fully documents it. The description adds no parameter-level detail, which matches the baseline 3 when schema coverage is high.
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 ('Get') and resource ('the project's active theme') and even enumerates the theme's contents (colors, typography, spacing), which is more than the tautological title. It is distinguishable from siblings like update_theme or get_project, though it never explicitly contrasts with update_theme.
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: reading the current/live theme state. There is no explicit 'use this when...' guidance and no mention of update_theme as the mutation alternative or of when to consult the draft fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_sectionInsert sectionADestructiveInspect
Insert a brand-new section at a given position on a page. It is added to the page's draft as one section; existing sections are not sent back and are untouched.
Use get_section_defaults first to get a valid section template for the type you want (e.g. HeroWithMedia, Faqs). Assign one fresh UUID and use it for both section.id and uislices[0].id. That UUID becomes the section's logicalId, which every section tool accepts; the result also gives the id hermes stored it under. Then call insert_section with position set to the zero-based index where the new section should appear, or -1 to append at the end. uislices[0].props needs both ctx and cfg, and uislices[0].type must be a type from list_section_types.
Set section.type to "Uislice" for a regular content section (or "Partial" for an embedded partial). The component name (HeroWithMedia, Faqs, etc) goes on uislices[0].type, not on section.type. When inserting a Partial (shared header/footer), use the partial's id (from list_partials) as section.id; its content stays in the partial, so uislices may be left empty.
A uislices[0].collectionId binds the new section to that collection in the same step. Script tags, event handlers and script links in content are refused.
You MUST provide lastVersion from get_page_content latestRevision.version; the insert is refused when the page changed since.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| section | Yes | The full new section. section.id and uislices[0].id must be the same fresh UUID. | |
| position | Yes | Zero-based index where the new section should appear. Use -1 to append at the end. | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version. Required for conflict detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: the write lands in the draft, existing sections are untouched, script tags/handlers/links are refused, and the insert is rejected when lastVersion is stale. It also explains the identity model — the supplied UUID becomes logicalId while the response carries the internal id hermes stored.
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 operation before the setup workflow, which is the right order. Some material restates the schema's own field descriptions (the Uislice vs component-name note appears in both), but nearly every sentence carries non-obvious operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, deeply nested, five-required-parameter mutation with no output schema, the description covers sequencing, identity, refusal conditions, and Partial-vs-Uislice branching. An agent has what it needs to construct a valid call without trial and error.
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 real meaning the schema lacks: section.type is 'Uislice' vs 'Partial' while the component name belongs on uislices[0].type, Partial sections may leave uislices empty, and collectionId binds in the same step. The lastVersion parameter is explained only by reference to another tool rather than its format.
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+location: 'Insert a brand-new section at a given position on a page,' and immediately clarifies scope ('added to the page's draft as one section; existing sections are not sent back and are untouched'). It does not explicitly contrast itself with save_section_content, reorder_sections, or remove_section, so an agent must infer the boundary from names 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?
Gives an explicit ordered workflow: call get_section_defaults first, assign one fresh UUID, then call insert_section with position as a zero-based index or -1 to append. It also names prerequisites (get_page_content latestRevision.version) and the conditions under which the call is refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_urlInspect URL in Search ConsoleARead-onlyInspect
Inspect a URL in Google Search Console (indexing, crawl, robots.txt status). The URL must sit inside the project's connected Search Console property.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full http or https URL to inspect | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the connectivity prerequisite, which is genuinely useful operational context, but says nothing about quota consumption on the underlying GSC API or what happens when no property is connected.
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, front-loaded with the action and the returned facets, with the constraint as a follow-up. Nothing is padded, though the parenthetical could be tightened into the main clause.
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 no output schema, the description covers what is inspected, the returned facets, and the eligibility constraint. The main remaining gap is failure behavior when the property is not connected, which is minor given the annotation coverage.
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 a constraint the schema lacks: the URL must fall inside the connected property, which materially narrows what values are valid. It still adds no guidance on the projectId parameter beyond 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?
States a specific verb (inspect) and resource (a URL) and even enumerates the facets returned: indexing, crawl, and robots.txt status. It does not, however, distinguish itself from the closely related sibling get_page_index_status, leaving the agent to infer which one answers a given indexing question.
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 a real precondition — the URL must belong to the project's connected Search Console property — which tells the agent when the tool will succeed. It stops short of naming alternatives (e.g., get_page_index_status vs this tool) or stating when not to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsList assetsARead-onlyInspect
List the media assets in a project's library, newest first: images (photos, icons, SVGs) by default. type picks the kind: image (the default), video or application (PDFs and other files); a MIME type such as image/webp counts as its kind. search finds assets by meaning (name and description) and returns at most the 10 best matches; limit, offset and tags do not apply to a search.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags (not applied to a search) | |
| type | No | image (default), video or application | image |
| limit | No | ||
| offset | No | ||
| search | No | Find assets by name or description (at most 10 best matches) | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, closed-world), and the description adds genuinely useful behavior: newest-first ordering, a hard cap of 10 results in search mode, and that search overrides the other filters. It does not describe pagination totals or result shape, but the key behavioral quirks are disclosed.
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?
Compact and front-loaded, with the core action and ordering stated first and the search caveat second. The dense semicolon-chained phrasing is slightly harder to scan than a short bulleted form, 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 read-only listing tool with no output schema, the description covers ordering, default type, filter/search interplay and the search result cap. Return-value shape and total-count behavior are left implicit, which is acceptable given the absence of an output schema but leaves a small 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 67% and the description fills gaps: it clarifies the type values including that a MIME type such as image/webp maps to its kind, and states the precedence relationship between search and the other parameters. limit/offset remain undocumented beyond the schema, so not a full 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 and resource ('List the media assets in a project's library') plus an ordering guarantee ('newest first') and default scope (images by default). An agent can distinguish this from search_stock_images and list_entries 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?
Clearly explains the branch between filter-mode and search-mode, including that limit, offset and tags are ignored during a search. It does not name sibling alternatives (e.g. search_stock_images for non-project imagery), so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList collectionsARead-onlyInspect
List all content collections in a project: each one's id, name, slug, hasPages, updatedAt, entry count, and its fields as name, type and list (true when the field holds an array). The built-in name and slug types hold the entry's own name and URL slug, never content. get_collection returns one collection's full field schema (labels, help text, reference targets and type-specific config).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine value by disclosing the return payload (id, name, slug, hasPages, updatedAt, entry count, fields) and the non-obvious semantics of the built-in name/slug types.
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 detail is front-loaded and each sentence is informative: payload fields, then a caveat about built-in types, then the sibling pointer. Slightly dense with enumerated attributes but no 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?
There is no output schema, and the description compensates by describing the return fields and their meanings. For a one-parameter read-only list tool, an agent has everything needed to call it and interpret the result.
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 a single required parameter with 100% schema description coverage, so the schema carries its meaning. The description adds nothing about projectId, which is acceptable only because coverage is complete.
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 ('List all content collections in a project') and enumerates the returned attributes, which no sibling list tool duplicates. It is clearly separable from get_collection, which is named as the single-collection variant.
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 closing sentence routes the agent to get_collection when the full field schema (labels, help text, reference targets, type config) is needed, implying this lightweight tool is for overview listing. No explicit exclusions, but the alternative and its selection condition are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList custom domainsARead-onlyInspect
Lists a project's custom domains. Returns [{ id, hostname, verified, misconfigured, updatedAt }]. Use to check whether a domain is verified or misconfigured.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds value beyond that by disclosing the exact return shape (id, hostname, verified, misconfigured, updatedAt), which is meaningful for a read tool with no output schema; only pagination/ordering behavior is left unstated.
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, front-loaded with what the tool does, followed by the return shape and the motivating use case. No filler, no repetition of the title, and each clause carries information an 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?
For a single-parameter read tool with no output schema, the essentials are covered: scope, return fields, and purpose. It is nearly complete, with only minor gaps around result ordering and whether the list is ever paginated or truncated for projects with many domains.
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 a single parameter (projectId) and schema description coverage is 100%, so the schema already documents it completely. The description implies the domains are scoped to the supplied project but adds no format, default, or constraint detail beyond the schema, which is the correct baseline of 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?
The description gives a specific verb and resource ("Lists a project's custom domains") and even enumerates the returned fields, so an agent knows exactly what it gets. It does not need to distinguish itself from a competing domain sibling because none exists in the tool list, but it also makes no explicit routing statement, which is the only thing separating 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?
"Use to check whether a domain is verified or misconfigured" gives a concrete purpose-driven use case rather than leaving intent implied. It stops short of stating when-not-to-use it or naming an alternative (e.g., a hypothetical get_domain or verify_domain tool), so it lands at clear-context-without-exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entriesList entriesCRead-onlyInspect
List entries in a collection
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of entries to return (1-100) | |
| offset | No | Pagination offset | |
| search | No | Search by entry name | |
| projectId | Yes | The project ID | |
| collectionId | Yes | The collection ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds only the collection scoping and says nothing about pagination behavior, ordering, or what the listing returns beyond what the schema and annotations already 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?
The description is a single, front-loaded sentence with no wasted words. Its brevity is appropriate, though the minimal content is under-specification rather than elegant concision.
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 list tool with a fully documented schema and annotations covering the safety profile, the description is minimally adequate. It does not clarify whether results are paginated, how they are ordered, or what an entry listing contains, which would help an agent call it correctly without inspecting the 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 projectId, collectionId, limit, offset, and search are all documented in the schema. The description adds no parameter-level meaning beyond the collection scope, 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 states a clear verb and resource (list entries) and adds meaningful scope: entries are listed within a specific collection. It is distinguishable from get_entry (singular) and list_collections (different resource), 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?
The description gives no guidance on when to use this tool versus alternatives such as get_entry, search_content, or list_collections. Usage is only implied by the word 'List', and there are no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_formsList formsARead-onlyInspect
Lists forms in a project. Returns { results: [{ id, name, updatedAt, formSchema { title, fields[{ label, name, type, required, helpText, options }], button } }], pagination: { offset, limit, total } }. Default limit 20. The schema here is abbreviated; get_form returns a form's complete schema. Use to find a formId.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/non-destructive, and the description adds real value on top: it discloses that the returned schema is abbreviated (and where to get the full one) and that limit defaults to 20. It does not mention ordering guarantees for the listed forms, a small remaining 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?
Front-loaded with purpose, then return shape, then the get_form caveat and the use case. The response-shape block is long but earns its place because there is no output schema; the rest is tight.
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 supplies the return structure including pagination fields, which is what an agent needs. Missing offset/paging guidance for multi-page iteration is the only notable omission for a 3-param list 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 33% — only projectId is documented in the schema. The description restates the default limit of 20 (already in the schema default) but says nothing about offset, pagination semantics, or the max of 100, so it only partially compensates for the coverage gap.
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 ("Lists forms in a project") and explicitly contrasts with the sibling get_form for full schemas. An agent can pick between list_forms and get_form 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?
"Use to find a formId" gives a concrete selection criterion, and the get_form pointer names the alternative for the deep-schema case. No explicit when-not-to-use statement, but the routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList pagesARead-onlyInspect
Lists pages in a project. Filter by status (DRAFT|PUBLISHED|IN_REVIEW) or search by name. Returns { results: [{ id, name, slug, status, visibility, updatedAt, hasUnpublishedChanges, meta }], pagination: { offset, limit, total } }; the text names each page's id too. Default limit 20, at most 100. Call before editing or publishing to find the page id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of pages to return (1 to 100) | |
| offset | No | Pagination offset | |
| search | No | Search by page name | |
| status | No | Only pages with this status. Omit for all pages. | |
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, closed-world read operation. The description adds useful behavioral context: it names supported filters, default and maximum limits, and describes the returned result and pagination shape.
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 purpose, then filters, then return shape and pagination defaults. It is fairly dense but each part is relevant; the return-shape detail is somewhat redundant given the output 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 annotations covering safety, 100% schema coverage, and an output schema, the description supplies the remaining practical context: filter options, pagination defaults, return shape, and the workflow reason to call it before editing or publishing.
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 five parameters. The description reinforces status filter values and pagination limits, but adds little syntax or 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 states a specific verb and resource: 'Lists pages in a project.' It distinguishes the tool from get_page by describing list filtering behavior and from create/update siblings by being a read/list operation.
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 usage context: 'Call before editing or publishing to find the page id.' This helps an agent know when to use it. It does not explicitly exclude alternatives like search_content or get_all_page_statuses, 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.
list_partialsList partialsARead-onlyInspect
List the partials (reusable sections like headers and footers) in a project. A partial is live when publishedRevisionId is set (status PUBLISHED, live true); hasUnpublishedChanges is true when its draft holds edits that are not live yet. Default limit 50, at most 100; offset pages through more.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of partials to return (1 to 100) | |
| offset | No | Pagination offset | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/destructive/openWorld, so the bar is lower, and the description still adds real value by decoding the status fields an agent will see (publishedRevisionId set = live, hasUnpublishedChanges = draft edits not live). With no output schema, this return-semantics context is the main behavioral contribution.
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, front-loaded with the purpose and definition before the field semantics and pagination note. Tight overall, though the pagination clause largely echoes the schema defaults.
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, three-parameter list tool with full schema coverage and annotations, the description supplies the needed domain framing (what a partial is, what the status fields mean). Only the ordering/filtering behavior and the full shape of returned records 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%, so limit, offset, and projectId are fully documented in the schema itself. The description only restates the limit ceiling and that offset pages, adding no syntax or semantics beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List the partials ... in a project" is a specific verb plus resource, and the parenthetical defines what a partial is (reusable headers/footers), which an agent may not know. It does not contrast itself with get_partial_content or list_pages, so the sibling distinction must be inferred.
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: enumerate partials for a given projectId. There is no explicit when-to-use, when-not-to-use, or pointer to get_partial_content for fetching a single partial's body, which is the most likely confusion given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyInspect
List all your Pixelesq projects
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description only adds the account-scoping implied by "your"; it says nothing about pagination, result ordering, or volume limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single six-word sentence with zero filler, and the resource being listed is front-loaded. Nothing in it could be trimmed 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 trivial zero-parameter read tool covered by annotations, the description is adequate but thin. With no output schema, it could still say what a project record contains or whether the result set is paginated, leaving a small but real 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool with a fully covered (albeit empty) 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 ("List") and resource ("Pixelesq projects") with the qualifier "your," so the purpose is unambiguous. It does not, however, distinguish itself from the sibling get_project or explain how the list differs from a filtered lookup.
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?
"List all your ... projects" implies retrieval of the full set with no filtering, which implicitly contrasts with get_project, but no explicit when-to-use guidance or alternatives are named. Usage must be inferred from the naming convention shared with list_pages/list_entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_redirectsList redirectsBRead-onlyInspect
List all URL redirects in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The word 'all' implies an unfiltered full listing, which is a small useful signal, but the description says nothing about pagination, ordering, or what a redirect record 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 short sentence, front-loaded with verb and resource, with no filler. Nothing to trim and nothing 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 simple single-parameter read tool with annotations covering safety, the description is nearly sufficient. However, with no output schema, the agent learns nothing about the shape of returned redirects or whether results are paginated, leaving a modest 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?
There is a single parameter (projectId) and schema description coverage is 100%, so the schema already documents it fully. The description adds no extra meaning such as whether an invalid or missing project returns an error versus an empty list, 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 ('List') and resource ('URL redirects in a project'), which clearly separates it from the many other list_* siblings that target pages, entries, assets, and forms. It stops short of distinguishing it from the redirect mutation siblings (create/update/delete_redirect) or noting scope like pagination.
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 call this versus inspecting redirects another way, no mention of pagination behavior, sorting, or limits. The agent gets a clear read verb but nothing about context or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_section_typesList section typesARead-onlyInspect
List available section types for building pages. Returns each type's name, description, group, use cases, content fields, and preview image URL. The text lists each type with its title and summary; the structured result also carries the fields and preview images. Groups: hero, features, content, faqs, testimonials, form, stats, logos, header, footer, cta. Pricing sections are in the form group. Use the optional group filter to narrow results.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Filter by group: hero, features, content, faqs, testimonials, form, stats, logos, header, footer, cta |
Output Schema
| Name | Required | Description |
|---|---|---|
| sections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower; the description still adds value by enumerating exactly what each entry returns (name, description, group, use cases, content fields, preview image URL) and by explaining the split between the text listing and the richer structured result. That textual-vs-structured distinction is behavioral context not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return contents, which is good, but the group list is repeated verbatim from the schema's parameter description and the return-field enumeration partly duplicates the existing output schema. Two sentences earn their place; the rest is restatement.
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?
An output schema exists so return values need no deeper explanation, and the one optional parameter is fully covered in both schema and description. For a simple read-only list tool this is essentially complete, with only the missing sibling routing keeping it below 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 coverage is 100% and the schema already documents the single group parameter, so baseline would be 3. The description earns more by adding a non-schema fact — that pricing sections live under the form group — which changes how an agent would set the filter.
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 available section types for building pages") and implicitly scopes it to page construction, which separates it from get_section_content or insert_section. It never names a sibling outright, so differentiation is inferential 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?
"Use the optional group filter to narrow results" gives usage for the parameter and "for building pages" hints at the workflow, but there is no statement of when to pick this over get_section_defaults or get_section_content, nor any when-not guidance. 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.
publish_entryPublish entryADestructiveInspect
Publish a collection entry to make it live. Bind the publish to what was reviewed: pass expectedRevisionId and expectedHeadAnchor (latestRevision.headAnchor from get_entry); hermes refuses if the draft changed since. When the entry has a pending address (draftSlug in get_entry, set through update_entry), this publish moves the page to it in the same step that makes the content live; pass that draftSlug as expectedAddress so the publish is refused if it changed meanwhile. redirectOldPath (default true) creates a redirect from the old address when the page had been public before; a first publish never needs one. When the collection has entry pages but its entry-page template has no sections yet, the result carries a warning: the entry is live but its page shows no body until the template is designed in the dashboard; tell the user.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | The entry ID | |
| projectId | Yes | The project ID | |
| revisionId | Yes | The revision ID to publish (from get_entry latestRevision.id) | |
| expectedAddress | No | The pending address (draftSlug) the user reviewed; hermes refuses the publish if it changed since. Pass an empty string to insist that no move is pending. Omitted: the address pending at publish time is used. | |
| redirectOldPath | No | When a pending address moves a page that has been public before, redirect the old address to the new one. Default true. | |
| expectedHeadAnchor | No | latestRevision.headAnchor as read at review time | |
| expectedRevisionId | No | The head revision id the user reviewed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, the description discloses the real behavioral traits: optimistic-concurrency refusal if the draft changed, the side effect of moving the page to a pending address in the same step, automatic redirect creation for previously-public pages, and a partial-success warning when the entry-page template has no sections. It does not explain what a failed or partial publish leaves behind for a destructiveHint-true tool, 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?
The core action and the review-binding contract come first, followed by the pending-address and redirect cases, then the warning behavior — a sensible front-loaded ordering. It is dense rather than bloated, though the warning sentence is long and could be trimmed 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?
With no output schema, the description carries the return-value burden and does mention the warning field in the result, which is the one non-obvious output condition. What the result contains otherwise (published revision, final address) is left unstated, a minor gap for a mutation tool whose annotations already flag it as destructive.
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 genuine meaning the schema does not: expectedAddress is tied to draftSlug from get_entry and to a refusal-on-change contract, and expectedHeadAnchor is tied to latestRevision.headAnchor. That connects the parameters into a review-consistency workflow rather than 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?
Opens with a specific verb and resource ('Publish a collection entry to make it live'), and the 'collection entry' framing cleanly separates it from publish_page and publish_partial in the sibling list. An agent knows what object it acts on and what the end state is 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 spells out preconditions for each optional parameter: pass expectedRevisionId/expectedHeadAnchor from get_entry to bind the publish to what was reviewed, pass draftSlug as expectedAddress when a pending address exists, and note that a first publish never needs a redirect. The refusal conditions act as explicit when/when-not guidance rather than leaving 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.
publish_pagePublish pageADestructiveInspect
Publish a page to make it live. revisionId must be the draft you reviewed: pass the latestRevision.id you read as both revisionId and expectedRevisionId, and latestRevision.headAnchor (from get_page, get_page_content or a save result) as expectedHeadAnchor. The publish is refused when a newer draft exists or the draft was edited since, so the user reviews again instead of publishing content they did not see.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID | |
| revisionId | Yes | The revision to publish: the latestRevision.id that was reviewed | |
| expectedHeadAnchor | No | latestRevision.headAnchor as read at review time; the publish is refused if the draft was edited since | |
| expectedRevisionId | No | The head revision id the user reviewed; the publish is refused if a newer draft exists |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: the publish is conditionally refused when a newer draft exists or the draft was edited, and the rationale (user re-reviews) is given. It does not describe what happens to the previously published version or what auth level is needed, which the destructiveHint annotation leaves 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?
Three sentences, front-loaded with the action, then the parameter contract, then the failure behavior. No filler and nothing 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 5-parameter mutating tool with no output schema, the concurrency contract is fully covered, which is the main correctness risk. Missing only the success-side outcome (page goes live, prior published revision superseded) and any permission notes.
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 actionable semantics the schema does not: pass the same latestRevision.id as both revisionId and expectedRevisionId, and name the tools that supply headAnchor. That cross-parameter relationship is genuinely additive.
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 (publish a page) and immediately defines the outcome (make it live). An agent can distinguish it from publish_entry, publish_partial, and unpublish_page 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?
Explains the precondition clearly: revisionId must be the draft the user reviewed, sourced from get_page, get_page_content, or a save result. It does not state when to prefer publish_page over reverting or updating a revision first, but the review-then-publish workflow is explicit enough to guide invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_partialPublish partialADestructiveInspect
Publish a partial (header, footer, or reusable section) to make it live across all pages. revisionId must be the draft you reviewed: pass the latestRevision.id you read as both revisionId and expectedRevisionId, and latestRevision.headAnchor (from get_partial_content or a save result) as expectedHeadAnchor. A revisionId that is not the newest draft is refused, so an older version is never put live by mistake, and hermes refuses when the draft changed since it was read.
| Name | Required | Description | Default |
|---|---|---|---|
| partialId | Yes | The partial ID | |
| projectId | Yes | The project ID | |
| revisionId | Yes | The revision to publish: the latestRevision.id that was reviewed | |
| expectedHeadAnchor | No | latestRevision.headAnchor as read at review time | |
| expectedRevisionId | No | The head revision id the user reviewed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as destructive and open-world, and the description adds meaningful behavioral context beyond them: it refuses non-newest revisions and refuses when the draft changed since it was read, preventing accidental publication of stale content. That is valuable concurrency-safety disclosure.
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 and effect, followed by the required revision provenance and the refusal behavior. It is dense but every sentence contributes to correct invocation.
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 publish operation with no output schema, the description covers the key preconditions, expected parameter sources, and failure modes. It does not describe the exact post-publish response, but the absence of an output schema makes that less critical.
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, but the description adds useful semantics by mapping revisionId to latestRevision.id, expectedRevisionId to the head revision the user reviewed, and expectedHeadAnchor to a value read from get_partial_content or a save result. This goes beyond the schema’s short 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?
The description uses the specific verb "publish" with the resource "partial (header, footer, or reusable section)" and states the effect: making it live across all pages. This clearly distinguishes it from sibling tools like publish_page and publish_entry by resource type.
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 concrete usage instructions: revisionId must be the reviewed draft, expectedRevisionId should match latestRevision.id, and expectedHeadAnchor comes from get_partial_content or a save result. It also states the refusal conditions, though it does not explicitly compare against publish_page or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_sectionRemove sectionADestructiveInspect
Remove a section from a page by id. All other sections are preserved. The removal is an explicit DELETE_SECTION operation applied on the page's draft under the revision lock (the draft is forked from the published head first when needed). sectionId may be the section's id or its logicalId (both come from get_page_content; the logicalId survives a publish, the id does not). Pass the same idempotencyKey when retrying a call whose answer was lost, so the removal is applied once. A section that is not on the page is an error, with or without a key.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID | |
| sectionId | Yes | The id or logicalId of the section to remove (from get_page_content) | |
| idempotencyKey | No | Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the destructiveHint annotation: the DELETE_SECTION operation on the draft under a revision lock, draft forking from the published head, and the fact that a missing section is an error with or without a key. This is exactly the mutation behavior an agent needs to 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?
Front-loaded with the core action and preservation guarantee, then layers in locking, id handling, and idempotency. Dense but every sentence carries necessary information; minor overlapping of idempotency/error detail keeps it from a perfect 5.
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, no-output-schema mutation tool, the description covers mutation mechanics, scope of effect, id semantics, idempotent retry, and error behavior. 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?
Despite 100% schema coverage, the description adds real meaning: sectionId accepts either id or logicalId with the crucial publish-survival distinction, and idempotencyKey semantics (replay on lost answer, use a new key after errors) are spelled out. This goes well beyond the schema text.
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 a section from a page by id') and immediately clarifies preserved scope ('All other sections are preserved'). An agent can distinguish this from delete_page or other destructive siblings 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?
Explains that sectionId comes from get_page_content and that logicalId survives publishing while id does not, which guides correct invocation. It doesn't explicitly name an alternative tool or a 'when-not-to-use' case, so it falls just short of the top mark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_sectionsReorder sectionsADestructiveInspect
Reorder the sections on a page. Provide the full ordered list of section IDs (every existing section must be included exactly once). Content is preserved and not sent back; only positions change. The reorder is refused when the page changed since lastVersion was read.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version. | |
| orderedSectionIds | Yes | Full ordered list of section ids (or logicalIds). Must include every existing section exactly once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing that content is preserved and only positions change, and — importantly — that the reorder is refused if the page changed since lastVersion was read, revealing optimistic concurrency behavior not encoded anywhere else. The destructiveHint=true annotation is implicitly contextualized rather than contradicted; only the response/error shape is left unexplained.
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 the action, followed by the input contract and the failure condition. No filler and no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema and annotations that only declare the safety profile, the description supplies the essential behavioral facts: preserved content, all-or-nothing input list, and version-gated rejection. It stops short of describing the success response or what the agent should do on a version conflict (e.g., re-read via get_page), which would complete the 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 coverage is 100%, so baseline would be 3, but the description adds real semantics: orderedSectionIds must cover every existing section exactly once (schema says this too, but the description reinforces it prominently), and lastVersion is explained as the freshness guard whose staleness causes rejection. That last point materially extends the schema's terse 'current revision version'.
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 ('Reorder the sections on a page') and immediately clarifies that only positions change, which cleanly separates it from insert_section, remove_section, and save_section_content. An agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the key usage constraint ('Provide the full ordered list of section IDs — every existing section must be included exactly once') and the precondition that lastVersion must be current. It does not explicitly name sibling alternatives for adding/removing sections, but the full-list contract effectively steers an agent away from partial updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_page_revisionRevert page to a revisionADestructiveInspect
Revert a page's draft to a previous revision. Creates a NEW draft revision whose content is copied from the given revision, making it the latest draft head. The given revision itself is not modified, and the published revision is unaffected until you publish. Every unpublished edit in the current draft is left behind.
Use get_page_revisions to find the revision to revert to (e.g. the currently published revision). To undo only the last few saves of the current draft, use revert_page_revision_to_version instead.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID | |
| revisionId | Yes | The revision ID to revert to (from get_page_revisions or page.publishedRevisionId) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the source revision is not modified, the published revision is unaffected until publish, and every unpublished edit in the current draft is left behind — that last point is the real consequence behind destructiveHint=true and it is stated plainly. It does not mention permission requirements or failure modes, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its non-obvious effect, then prerequisites, then the alternative. Every sentence carries distinct information — the mechanism, the immutability guarantees, the data-loss warning, and the routing hint — with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema mutation guarded by a destructiveHint, the description supplies everything needed: what is created, what is preserved, what is lost, and how to locate the revisionId. No meaningful gap remains for an agent to call it safely.
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 projectId and revisionId are already documented, and the schema even hints at the source ('from get_page_revisions or page.publishedRevisionId'). The description reinforces that provenance but adds no format or constraint detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Revert a page's draft to a previous revision') and immediately clarifies the mechanism — a NEW draft revision is created rather than the old one being restored. It explicitly distinguishes itself from both get_page_revisions and revert_page_revision_to_version, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the prerequisite lookup tool ('Use get_page_revisions to find the revision to revert to') with a concrete example, and names the alternative ('use revert_page_revision_to_version instead') together with the exact condition that selects it — undoing only the last few saves of the current draft. When/when-not is fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_page_revision_to_versionRoll a revision back to a versionADestructiveInspect
Undo recent saves on a page's current draft: keeps the saves up to and including saveNumber and deletes every newer one. Read get_page_revisions first: the draft head (isDraftHead) lists its saves as [{ number, savedAt }] and its headAnchor. Pass that revision id, the save number to keep, and the headAnchor as expectedHeadAnchor. 0 keeps none of the draft's saves (back to the state the draft started from). Edits one person makes within about five minutes of each other share one save number, so undoing that number undoes all of them.
Refused unless the revision is the page's current draft (not the published one), the draft has not changed since the headAnchor was read, and a newer save exists. WARNING: deleted saves cannot be recovered.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page the revision belongs to | |
| version | No | Older name for saveNumber | |
| projectId | Yes | The project ID | |
| revisionId | Yes | The draft head revision id (isDraftHead in get_page_revisions) | |
| saveNumber | No | Keep the saves up to and including this number (from get_page_revisions saves); newer ones are deleted | |
| expectedHeadAnchor | Yes | The draft head's headAnchor from get_page_revisions; the undo is refused if the draft changed since |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by disclosing that deleted saves are unrecoverable, that the operation is refused unless the revision is the current draft and the anchor still matches (optimistic concurrency), and that edits within ~5 minutes collapse into one save number. This is rich behavioral context an agent needs before 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?
Front-loaded with the core operation, then prerequisites, edge cases, refusal conditions, and the destructive warning. Dense but every sentence carries information; the only cost is that the paragraph runs long enough that the WARNING could be surfaced earlier.
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, it covers the workflow prerequisite, anchor-based concurrency check, save-number edge case, and irreversibility. Nothing material is missing for an agent 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 coverage is 100%, but the description still adds meaning: it maps revisionId to the isDraftHead entry, explains that saveNumber=0 keeps none of the draft's saves, and clarifies that expectedHeadAnchor is the stale-read guard. It does not explain the 'version' alias parameter, a minor omission.
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 ('Undo recent saves on a page's current draft') and defines the exact operation: keep saves up to saveNumber, delete all newer ones. The draft-only scope and save-number semantics distinguish it from the sibling revert_page_revision without 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?
Explicitly tells the agent to read get_page_revisions first and pass the head revision id, save number, and headAnchor. It also enumerates the refusal conditions (revision must be the current draft, headAnchor must be unchanged, a newer save must exist), so when-not-to-use is covered as clearly as when-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_entry_contentSave entry contentADestructiveInspect
Save/update the content of a collection entry.
Merge semantics (RFC 7396 JSON Merge Patch):
Fields you send override the server's values.
Fields you omit are preserved from the existing entry.
To explicitly clear a field, send it as null.
Arrays are REPLACED wholesale: send the full array you want.
Content is a JSON object where keys MATCH the collection's field schema (call get_collection first to see exact field names and types).
Value shape by field type:
text: string
html: string (HTML)
number: number
checkbox (and the older boolean): true or false
date: a calendar date "YYYY-MM-DD" (e.g. "2026-09-09") when the field's config.time is false or absent; an ISO timestamp with a numeric UTC offset such as "2026-09-09T14:30:00-07:00" (never a Z suffix) when config.time is true. Check the field's config in get_collection. Anything else is refused.
image / media: object { src: string, alt?: string } or a URL string
icon: a library icon path such as "regular/rocket.svg" (styles regular, thin, light, bold, fill, duotone; every style but regular repeats itself in the file name, e.g. "duotone/rocket-duotone.svg"), or the https URL of an SVG or PNG uploaded to the project. To show it on a section bound to the collection, map the item's first icon slot with three keys: "icons[0].pqIcon": "<%=_icon.FIELD.pqIcon%>", "icons[0].src": "<%=_icon.FIELD.src%>", "icons[0].svgStr": "" (FIELD is the icon field's name). Library icons then take the template card's icon color; uploaded files draw as uploaded.
reference: string (target entry ID; must point at an existing entry)
related: string (the ID of another entry in the same collection); an array of IDs when list: true
LIST fields: when a field has list: true in the schema (check get_collection), send an ARRAY of the base type instead, e.g. a list reference takes ["entryId1", "entryId2"], a single-ID string is INVALID and will be rejected. Arrays are replaced wholesale on merge.
The built-in name and slug fields (type name and type slug in the schema) are NOT content: keys for them are refused. Rename an entry or change its address with update_entry.
Example: to update only the body, send { body: "New content" }. Name, slug, and other fields are preserved automatically.
You MUST provide lastVersion from get_entry latestRevision.version for optimistic concurrency.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Entry content patch. Send only the fields you want to change; omitted fields are preserved from the existing entry. Send null to clear a field. Call get_collection to see the field schema. | |
| entryId | Yes | The entry ID | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version (from get_entry latestRevision.version). Required for conflict detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true already present, the description adds substantial behavioral context: omitted fields are preserved, null clears a field, arrays are replaced wholesale, reference IDs must exist, list fields must be arrays, and invalid date formats are refused. It also explains optimistic concurrency via lastVersion, which no annotation 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 merge semantics before the exhaustive field-type rules, and the bullets make the density navigable. The icon mapping block is long and niche, but it is tied to a genuinely complex content type rather than being 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?
Covers prerequisites, merge behavior, and content value shapes thoroughly for a nested, polymorphic mutation tool with no output schema. It stops short of saying what the call returns and what specifically happens on a lastVersion conflict, which an agent would benefit from knowing.
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 well beyond it by giving per-field-type value shapes (text, html, number, checkbox/boolean, date and its config.time-dependent format, image/media, icon, reference, related) and list-field semantics. lastVersion also gets runtime meaning ('from get_entry latestRevision.version').
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 ('Save/update the content of a collection entry') and immediately distinguishes itself from update_entry by declaring that name/slug keys are refused and must be changed via update_entry. An agent can separate this from save_page_content or save_section_content on resource 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?
Explicitly directs the agent to call get_collection before composing content and get_entry for lastVersion, and routes rename/address changes to update_entry. The merge-only nature of the call is stated up front, so when to use and when not to use it are both inferable without opening a schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_page_contentSave page contentADestructiveInspect
Save sections to a page. Replaces the page's sections list with the provided sections (section-level add/remove/reorder happens here; a section you leave out is removed explicitly, on every project), but within each matching section, cfg and ctx are merged against the server's current state.
Each section has: id (uuid), name, type ("Uislice" for regular content sections, "Partial" for embedded partials), and uislices array. Each uislice has: id (uuid), type (the component name like HeroWithMedia, Faqs), collectionId (optional), and props with ctx (content) and cfg (layout config).
Common uislice component types (uislices[0].type): HeroWithMedia, HeroWithMediaBelow, StickyFeatures, StickyFeaturesCard, HowItWorks, Faqs, FaqsOnCard, SimpleForm, PqPricing, CardWithMedia, TextGrid, LogoGrid, MediaBentoCards, TestimonialGrid.
Merge semantics for cfg and ctx within each section (RFC 7396 JSON Merge Patch):
Fields you send override the server's values.
Fields you omit are preserved unchanged.
To explicitly clear a field, send it as null.
Arrays (ctas, items, media, icons, menu, social, legal) are REPLACED wholesale.
Sections are matched by id or logicalId. A section that keeps a logicalId but matches nothing is refused with a request to read the page again. A new section needs both props.ctx and props.cfg: call get_section_defaults first to get properly structured defaults, then change text values (title.value, desc.value, CTA labels/urls, media src/alt) while preserving structure.
Refused instead of silently dropped: a change to an embedded header or footer's content (save it with save_partial_content; a "Partial" section may be sent with an empty uislices list to keep it in place), a change of an existing section's component type (use remove_section then insert_section), an unknown section type, and script tags, event handlers or script links in content. Items a section draws from a collection are kept as stored; change the entries with update_entry or save_entry_content. If a page draft stops loading after a save, undo that save with revert_page_revision_to_version (get_page_revisions lists the save numbers), not revert_page_revision.
You MUST provide lastVersion from get_page_content latestRevision.version for optimistic concurrency.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| sections | Yes | Complete list of sections. Replaces existing sections wholesale. Call get_section_defaults to get the correct shape for each section type. | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version (from get_page_content latestRevision.version). Required for conflict detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by explaining the replacement semantics, which omissions cause removal, how cfg/ctx merge against server state, which changes are refused rather than silently dropped, and which recovery tool to use after a bad save. This is exactly the behavioral context needed for a destructive save 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 description is front-loaded and logically organized, but it is lengthy and includes a long list of common component types that is helpful yet not strictly essential. For a complex destructive save operation the length is mostly justified, though some sections could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex nested schema, destructive behavior, and lack of an output schema, the description is complete: it covers prerequisites, merge semantics, matching rules, refusal cases, alternatives, and post-failure recovery. An agent has enough information 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?
Although schema coverage is already 100%, the description adds crucial semantic meaning: section/uisclice structure, matching by id or logicalId, RFC 7396 merge behavior, array replacement rules, and the requirement that lastVersion come from get_page_content. These details materially affect correct parameter construction.
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?
Starts with a specific verb and resource ('Save sections to a page') and immediately clarifies the exact operation: replacing the page's section list while merging cfg/ctx within matching sections. It also distinguishes page-level section work from sibling operations like insert_section, remove_section, save_section_content, and save_partial_content.
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 when section-level add/remove/reorder should happen here and names alternatives for adjacent operations: save_partial_content for embedded header/footer content, remove_section then insert_section for component type changes, update_entry/save_entry_content for collection items, and get_section_defaults for new sections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_partial_contentSave partial contentADestructiveInspect
Save sections to a partial (header, footer, or other reusable section). Replaces the partial's sections list with the provided sections (a section you leave out is removed explicitly, on every project), but within each matching section cfg and ctx are merged against the server's current state. Sections are matched by id or logicalId.
Merge semantics for cfg and ctx within each section (RFC 7396 JSON Merge Patch):
Fields you send override the server's values.
Fields you omit are preserved unchanged.
To explicitly clear a field, send it as null.
Arrays (ctas, items, media, icons, menu, social, legal) are REPLACED wholesale.
section.type must be "Uislice" for regular content sections or "Partial" for embedded partials. The component name (HeaderWithMenu, SimpleFooter, etc) goes on uislices[0].type. A new section needs both props.ctx and props.cfg (get_section_defaults gives both) and a type from list_section_types.
Refused instead of silently dropped: a change of an existing section's component type (save the partial without it, then with the new section), a section that keeps a logicalId but is no longer on the partial (read it again), and script tags, event handlers or script links in content.
You MUST provide lastVersion from get_partial_content latestRevision.version for optimistic concurrency. The result carries the new latestRevision with its headAnchor for publish_partial.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | Yes | Complete list of sections on the partial. Replaces existing sections wholesale. | |
| partialId | Yes | The partial ID | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version from get_partial_content latestRevision.version. Required for conflict detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description earns that hint by spelling out exactly what is destroyed: omitted sections are removed explicitly on every project, and arrays (ctas, items, media, icons, menu, social, legal) are REPLACED wholesale. It further discloses merge semantics (RFC 7396), explicit refusals (component type changes, stale logicalIds, script tags), and concurrency 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?
Front-loaded with the core operation and replace semantics, then proceeds to merge rules, type guidance, refusal cases, and the version requirement in a logical order. The bullet list for merge semantics is dense but every line carries non-obvious behavioral information; only the prose paragraph on refusals is slightly verbose.
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?
Complete for a destructive, nested mutation with no output schema: it covers prerequisites, replacement scope, per-field merge behavior, refusal conditions, concurrency, and the returned latestRevision.headAnchor needed for publish_partial. Nothing an agent needs to call this 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 the baseline is 3, but the description adds substantial meaning beyond field types: merge behavior for cfg and ctx, the null-clears rule, array replacement, the distinction between section.type ('Uislice'/'Partial') and the component name on uislices[0].type, and matching by id or logicalId. This is exactly the kind of semantics the schema cannot express.
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 ('Save sections to a partial (header, footer, or other reusable section)') and immediately distinguishes it from save_page_content and save_section_content via the 'partial' scoping. An agent can identify the target and operation without reading 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?
Specifies prerequisites very clearly: lastVersion from get_partial_content, defaults from get_section_defaults, types from list_section_types, and the follow-up publish_partial. It also gives a valid alternative flow when a component type change is refused ('save the partial without it, then with the new section'). It doesn't explicitly say when to use save_page_content or save_section_content instead, but the scoping 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.
save_section_contentSave section contentADestructiveInspect
Save a single section on a page. Only this section changes: the change is applied to the page's draft as one section edit, and sibling sections are never sent back. The section is matched by id or logicalId.
Use this for any edit to one section. Start with get_section_content to read the section, modify the fields you want, then pass the (partial or full) section object back.
Merge semantics (RFC 7396 JSON Merge Patch):
Fields you send override the server's values.
Fields you omit are preserved unchanged.
To explicitly clear a field, send it as null.
Arrays (ctas, items, media, icons, menu, social, legal) are REPLACED wholesale: send the full array you want, including any items you are keeping. To remove one item, send the array without it. To add one, send the array with it.
section.type must be "Uislice" for regular content sections. The component name (HeroWithMedia, Faqs, etc) goes on uislices[0].type, not on section.type. An embedded header or footer ("Partial") is saved with save_partial_content instead.
A change of an existing section's component type (uislices[0].type, e.g. Faqs -> FaqsOnCard) is refused: use remove_section followed by insert_section with the new type. Script tags, event handlers and script links in content are refused.
Collection-fed items: when a section is bound to a collection, the paths get_section_content lists as collectionFed show the collection's entries and are read-only here; an edit there is refused, so change the entries with update_entry or save_entry_content. If a page draft stops loading after a save, undo that save with revert_page_revision_to_version (get_page_revisions lists the save numbers), not revert_page_revision.
Icons: a stored svgStr is drawn in place of pqIcon. On section and item icons, setting pqIcon drops the stored svgStr; on a button, menu or social icon send svgStr: null with the new pqIcon. An svgStr reference such as svg:1a2b3c4d from a compact read keeps that icon.
You MUST provide lastVersion for optimistic concurrency: get_section_content returns it as lastVersion, get_page_content as latestRevision.version, and each save returns the next one as revision.version. The save is refused when the page changed since that version was read.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| section | Yes | The updated section. Its id names the section to change: the section's id or its logicalId (the logicalId stays the same when a draft is forked from the published page; the id does not). Include type and uislices with the ctx and cfg fields you are changing. | |
| projectId | Yes | The project ID | |
| lastVersion | Yes | The current revision version. Required for conflict detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the merge semantics (RFC 7396), wholesale array replacement, null-clearing behavior, id/logicalId matching, optimistic concurrency requirements, and specific refusals such as script tags and component-type changes. It also explains icon behavior and what to do when a collection-fed path is edited, which is substantial behavioral context for a destructive write 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 description is long but well-structured: the core purpose and workflow are front-loaded, and the merge, type, and version rules are broken out as distinct concerns. A few passages are dense, but nearly every sentence earns its place given the complexity of the nested section object.
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, but the description says each save returns the next version as revision.version, completing the concurrency loop. For a write tool with a deeply nested section payload, the description covers the critical semantics an agent needs 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 coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains how lastVersion is used for conflict detection and how the section object is matched by id or logicalId. It also clarifies that section.type must be 'Uislice' and the component name belongs on uislices[0].type, which goes beyond the schema's 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?
The description states a specific verb (save) and resource (a single section on a page), and immediately scopes it: only this section changes, siblings are never sent back. It also distinguishes its role from save_partial_content and save_page_content, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this for any edit to one section' and prescribes a workflow starting with get_section_content. It names alternatives and when-not conditions: save_partial_content for Partial sections, remove_section plus insert_section for component-type changes, update_entry/save_entry_content for collection-fed paths, and revert_page_revision_to_version instead of revert_page_revision for failed drafts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contentSearch project contentARead-onlyInspect
Search a project's pages and collection entries by text. Collections themselves are not searchable: list_collections lists them. Returns { results, limit, capped }: at most limit pages and limit entries, each with its type and metadata; capped true means there may be more, so narrow the query or raise the limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most results of each kind, pages and entries (1 to 50, default 20) | |
| query | Yes | Search query text | |
| entity | No | Only pages, or only collection entries (entries with their own page are found through their page and marked pageBackedEntry) | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/openWorldHint/destructiveHint already declaring the safety profile, the description still adds real behavior: the return shape { results, limit, capped } and the meaning of capped=true as a truncation signal. It leaves the per-result metadata vague ('its type and metadata'), so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, exclusion second, return contract third. Zero filler and no repetition of annotation-declared facts.
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 contract and does it well, and all four parameters are covered. Missing only smaller details an agent might want, such as match semantics (substring vs. fuzzy) and what fields the 'metadata' contains.
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 adds value by explaining cap semantics ('capped true means there may be more') that the schema does not express. The limit explanation ('at most limit pages and limit entries') largely restates the schema's 'results of each kind' wording.
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 a project's pages and collection entries by text') and explicitly delimits scope with 'Collections themselves are not searchable'. An agent can distinguish it from list_collections, list_pages, and list_entries 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?
Names a concrete alternative for the excluded case ('Collections themselves are not searchable: list_collections lists them') and gives actionable guidance when results are truncated ('narrow the query or raise the limit'). It does not cover when to prefer this over list_pages/list_entries for browsing without a query, 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.
search_stock_imagesSearch stock imagesARead-onlyInspect
Search Unsplash for stock photos. Use this when you need a real-world photo and the user has not supplied one. Unsplash photos are hotlinked, never copied into the asset library: set the chosen result's url exactly as returned (keep its query parameters) as the section media.src, then call upload_asset(sourceUrl: that url, downloadLocation: its stock.downloadLocation) once, which stores nothing and reports the use to Unsplash, as Unsplash requires. Each result's credit names the photographer with links: credit them when you show or suggest a photo ("Photo by on Unsplash", linking to credit.photographerUrl and credit.unsplashUrl).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (1-30) | |
| query | Yes | What to search for, e.g. 'mountain sunrise at a lake' | |
| offset | No | Pagination offset | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, so safety is partly covered, but the description adds non-obvious behavioral facts: photos are hotlinked rather than copied, and the upload_asset call "stores nothing and reports the use to Unsplash." Those details cannot be inferred from the annotations. It does not describe the result object's structure in full, but names the key result fields (url, stock.downloadLocation, credit).
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 sentences, each carrying distinct information (purpose, when to use, hotlinking workflow, credit requirement), and front-loaded. The middle sentence is long and packed with nested instructions, which slightly hurts readability, but nothing is repeated.
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 there is no output schema, the description supplies enough about the return shape (url, stock.downloadLocation, credit fields) and the required follow-up to call the tool and use its results correctly. It never says how many results to expect or how pagination interacts with the credit workflow, 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 query, limit, offset and projectId are already documented in the schema. The description explains query intent ("a real-world photo") but adds nothing about limit, offset or projectId usage. A 3 baseline 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 plus the provider: "Search Unsplash for stock photos." That immediately separates it from generate_image and upload_image among the siblings, and the opening sentence front-loads the distinction between fetching real photos and generating 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?
Explicitly says when to use it ("when you need a real-world photo and the user has not supplied one"), which implicitly rules out generating one or reusing a supplied asset. It also prescribes the follow-up sequence — setting media.src to the returned url and calling upload_asset with sourceUrl/downloadLocation — so the agent knows the next step, not just when to start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unbind_section_from_collectionUnbind section from collectionADestructiveInspect
Disconnect a Uislice section's collection binding so it no longer renders entries from a collection. Reverses bind_section_to_collection: the collection and its field mapping are both cleared, and the section shows its own items again. Applied as a SET_COLLECTION operation with no collection, on the page's draft under the revision lock, checked against the section's current anchor.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID containing the section | |
| projectId | Yes | The project ID | |
| sectionId | Yes | The section's id or logicalId (from get_page_content) | |
| idempotencyKey | No | Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a destructive, non-read-only mutation, and the description adds real value beyond them: it says the collection and field mapping are both cleared, that the change lands on the page's draft under the revision lock, and that it is validated against the section's current anchor. It does not say what happens when the section is already unbound (no-op vs error) or whether a publish is then required.
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 dense sentences, front-loaded with the user-visible effect, then the inverse operation, then implementation behavior. Slightly jargon-heavy ('SET_COLLECTION operation', 'revision lock', 'current anchor') but nothing is 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?
For a destructive mutation with no output schema, the description covers what changes, what is destroyed, and the draft/lock/anchor mechanics an agent needs. The remaining gap is outcome on already-unbound sections and the publish implication, which an agent would still have to discover.
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 every parameter is described in the schema, including idempotencyKey retry semantics, so the baseline is 3. The description only loosely reinforces identifiers via mentions of 'the section's current anchor' and 'the page's draft' without adding format or constraint 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?
States a specific verb+resource ('Disconnect a Uislice section's collection binding') and its effect ('no longer renders entries from a collection'). It explicitly names and contrasts with the sibling bind_section_to_collection, so an agent can route between the pair 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 sentence 'Reverses bind_section_to_collection' gives a clear usage context and names the inverse operation. It doesn't cover adjacent alternatives such as remove_section or what to do if the section has no binding, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_pageUnpublish pageBDestructiveInspect
Unpublish a page (take it offline)
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral nuance: 'take it offline' implies a reversible state change rather than removal, unlike delete_page. It does not state whether publication history or live URLs are 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?
A single short phrase with the verb front-loaded and the clarifying gloss parenthetical. No filler, 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 two-parameter mutation with full schema coverage and annotations covering the destructive/read-only profile, the definition is nearly sufficient. The only real gap is the unpublish-vs-delete distinction, which materially affects correct tool 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?
Both parameters are fully documented in the schema (100% coverage) with UUID formats and patterns, so the schema carries the semantics. The description adds nothing about projectId/pageId scoping, which is the correct baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('unpublish') plus resource ('a page'), with a parenthetical that disambiguates the state change as 'take it offline'. This separates it well from publish_page and unpublish_partial, though it does not explicitly distinguish it from the destructive sibling delete_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?
No guidance on when to unpublish versus delete, or versus publish_page, and no mention of prerequisites such as the page currently being published. 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.
unpublish_partialUnpublish partialADestructiveInspect
Unpublish a partial (take it offline across all pages)
| Name | Required | Description | Default |
|---|---|---|---|
| partialId | Yes | The partial ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and openWorldHint=true, so the agent knows this is a destructive, far-reaching mutation. The description's 'take it offline across all pages' adds scope context beyond the annotations. It does not say whether content is preserved, whether this is reversible, or permission requirements – worth noting but partially covered by 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?
Single crisp sentence, front-loaded verb, parenthetical qualifier adds scope 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?
Adequate for a simple two-param mutation with full schema coverage and destructive annotations. Missing explicit state preconditions (must be currently published) and reversibility for a destructive operation, which an agent deciding whether to call 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 params documented, so schema does the heavy lifting. The description adds no parameter-level detail beyond what's already structured; 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 (unpublish) and resource (partial), and the parenthetical clarifies that it affects all pages. It is distinguishable from siblings like unpublish_page and delete_page, though not explicitly contrasted.
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 operation itself but there is no explicit when/when-not guidance, no mention of preceding state (must be published), and no distinction from unpublish_page beyond the resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_assetUpdate asset description and tagsADestructiveIdempotentInspect
Change the description or the tags of an asset in the project's media library (find its id with list_assets). A field you leave out keeps its stored value; tags you send replace the asset's tags. The description is what list_assets search reads. The file, its name and its url do not change, and pages that use the asset are not touched.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | The asset's tags; replaces the stored list | |
| assetId | Yes | The asset ID from list_assets | |
| projectId | Yes | The project ID | |
| description | No | New description of what the image shows |
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 genuinely useful context beyond that: omitted fields retain stored values, sent tags replace the whole list, and pages using the asset are unaffected. It also notes the description field feeds list_assets search, a non-obvious downstream effect. It does not cover permissions or the response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and scope, then the update semantics, then the non-effects. No filler; the only mild overlap is the tags-replacement clause, which is also in the schema, but it earns its place by reinforcing merge-vs-replace.
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-parameter partial-update tool with full schema coverage and no output schema, the description covers intent, prerequisites, merge semantics and side effects. The only gap is the return value/confirmation behavior, which is minor given annotations already flag idempotency.
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 it by explaining patch semantics ('a field you leave out keeps its stored value') and the replace-not-merge behavior of tags, neither of which the bare schema states. It also frames what 'description' means semantically (what the image shows) and that it is searchable.
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 (change description or tags of an asset in the media library) and immediately bounds the scope by declaring what does NOT change: the file, its name and url. That lets an agent distinguish it from upload_asset and other mutators without inspecting 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?
Points the agent at list_assets to obtain the id, which is the key prerequisite for invocation. It also clarifies what the tool is not for (renaming, replacing files). It stops short of naming an explicit alternative for those excluded operations, so no exclusion routing to a sibling is given.
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 schemaADestructiveInspect
Define or update the field schema of a collection. Pass the FULL ordered list of fields you want. This is a wholesale replace at the schema level (it is not a JSON Merge Patch).
expectedUpdatedAt is required: the updatedAt from get_collection (or from create_collection or the previous update_collection_schema). The save is refused if the collection changed since, for example a field a teammate just added in the dashboard; then call get_collection again, merge your fields into the current list, and retry.
Each field has:
name: string identifier (used as the key in entry content)
label: human-readable label
type: one of name, slug, text, html, number, checkbox (a yes/no value; boolean is saved as checkbox), date, image, media, icon, option, reference, related. The legacy select, textarea, email and url types are accepted so a collection that already has them can be saved back unchanged; use option and text for new fields.
required: optional boolean
helpText: optional help string
options: for option type, a comma-separated string of choices; for reference type, the target collection id; otherwise empty
list: optional boolean (allow array of values)
to: alternative for reference target id
config: optional flat object of type-specific settings. For date fields: { format, time, timeFormat } where format is one of "MMM D, YYYY" (default), "MMMM D, YYYY", "D MMM YYYY", "D MMMM YYYY", "MMM D", "MMMM D", "ddd, MMM D, YYYY", "dddd, MMMM D, YYYY", "MM/DD/YYYY", "DD/MM/YYYY", "DD.MM.YYYY", "YYYY-MM-DD", "MMM YYYY", "MMMM YYYY", "YYYY"; time is a boolean (false = calendar date only, true = date with time; this decides the value shape entries store); timeFormat is "12h" or "24h". A field sent without a config key keeps its stored config; config: null clears it. Other types take no config.
An icon field holds one icon per entry: a library icon or the site's own uploaded SVG or PNG. Use it for the small symbol beside a service, feature or step; photos and logos stay media.
Every collection has built-in Name and Slug fields (type name and type slug); they are required, never list, and their values are not part of content: the entry's name and URL slug live on the entry itself and change through update_entry. Keep both in the list when updating a collection that has them (a built-in cannot be removed or renamed); a collection holds at most one of each. A legacy collection whose name or slug is a plain text field can convert it by changing that field's type to the built-in one. Reserved field names: _raw, _icon, _pagination, _filters.
The schema has no draft: live listings and entry pages read it as soon as it is saved. A field left out of the list is removed from the schema, and changing a date field's config, or removing or retyping a date field, republishes every published entry page of the collection.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID | |
| fieldSchema | Yes | Full ordered list of fields. Replaces the collection's existing fieldSchema. | |
| collectionId | Yes | The collection ID | |
| expectedUpdatedAt | Yes | updatedAt as read from get_collection (or returned by create_collection or the last update_collection_schema); the save is refused if the collection changed since |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/write behavior, but the description adds substantial context beyond them: fields left out are removed, the schema has no draft, removing/retyping date fields republishes published entry pages, and saves are optimistically locked on expectedUpdatedAt. This is exactly the kind of higher-tier behavioral disclosure expected.
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?
Long but front-loaded with the operation and the replace semantics, then structured as a field-by-field bullet list. Dense and mostly waste-free, though a few details (icon field guidance, legacy type notes) could be trimmed for a tighter read.
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 mutation with 4 required params and no output schema, the description covers edge cases a caller needs: built-in Name/Slug handling, legacy type acceptance, reserved names, config null semantics, and republish side effects. Nothing essential 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% (baseline 3), yet the description adds real value: it enumerates every field property with meaning, explains config semantics for date fields (format enum, time boolean effects on value shape, null-clears behavior), option/reference semantics, and reserved field names. Well 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 (define/update) and resource (field schema of a collection), and immediately clarifies it is a wholesale replace rather than a merge patch. This distinguishes it clearly from sibling tools like update_form_schema and update_entry.
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 explicit procedural guidance: pass the full ordered list, expectedUpdatedAt is required and where to get it, and what to do on conflict (re-fetch, merge, retry). No explicit when-not-to-use exclusions vs create_collection, but the usage flow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_entryRename entry or change its slugADestructiveInspect
Update a collection entry's metadata only (name and/or slug). Partial update: provided fields are changed, omitted fields are preserved. This does NOT change the entry's content fields (use save_entry_content for those; the built-in name and slug keys are refused there). A slug must be lowercase letters, numbers and hyphens, and free in the collection. For an entry with a page the new slug is a PENDING address (get_entry shows it as draftSlug): the page keeps its current address until the next publish_entry, which moves it and, by default, redirects the old address. Passing the current address back cancels the pending move. For an entry without a page the slug changes immediately. On a collection whose name and slug are the built-in types, the name is live data: listings on the published site show a new name without a publish. An older collection may keep them as plain text fields inside content, which is what its listings show; when that copy still matches the old value it is updated too, in the draft, so listings show it after the next publish_entry (the result says so in contentCopy). A copy that differs is left alone and the result says to change it with save_entry_content.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated entry name | |
| slug | No | Updated URL slug (lowercase letters, numbers and hyphens). Pending until publish when the entry has a page. | |
| entryId | Yes | The entry ID | |
| projectId | Yes | The project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructive/openWorld/not-readOnly; the description adds far more: partial-update preservation, pending slug behavior for paginated entries, redirect-by-default on publish, cancellation of pending moves by passing the current address, immediate slug change for entries without pages, and the two collection types (built-in vs text copy) with contentCopy reporting. These are non-obvious behavioral consequences beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key exclusion (save_entry_content) are front-loaded. The single dense paragraph is verbose—particularly the older-collection contentCopy nuance—and could be bulleted for scanability, but nearly every sentence carries necessary state/behavior 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 mutation tool with no output schema and 100% param coverage, the description fills the remaining behavioral gaps (pending vs immediate slug, redirects, contentCopy result field, collection-type differences). An agent has what it needs to call and interpret the result.
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 defines all four parameters and even notes the slug pending behavior. The description nonetheless adds non-obvious semantics—passing the current address cancels a pending move, and name behaves as live data on built-in collections while being draft-content on older ones. This adds meaning beyond the schema, though some of it overlaps what the schema describes.
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: 'Update a collection entry's metadata only (name and/or slug).' It immediately carves out the boundary against save_entry_content ('This does NOT change the entry's content fields'). An agent can identify the tool's scope without inspecting siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative for content edits ('use save_entry_content for those; the built-in name and slug keys are refused there') and states the separate publish_entry step required for slug changes. Use vs. use-not conditions are both provided, satisfying the top criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_form_schemaUpdate formADestructiveInspect
Change a form's name or schema. Forms have no draft: when the form is on a published page, the change is live at once. Each top-level schema key you send (fields, groups, scoring, email and so on) replaces the stored one whole and keys you leave out are kept, so send complete values: the full fields array, the full scoring object. expectedUpdatedAt (updatedAt from get_form) is required, and the change is refused if the form changed since. The merged schema is checked like create_form's before anything is written: problems the change introduces are refused, ones already in the form come back as warnings, and fields the change removes are listed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New form name | |
| formId | Yes | The form ID | |
| projectId | Yes | The project ID | |
| formSchema | No | The top-level keys to replace; keys left out are kept | |
| expectedUpdatedAt | Yes | updatedAt as read from get_form; the change is refused if the form changed since |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds substantial context beyond them: changes go live immediately on published pages (no draft), omitted top-level keys are preserved while sent keys are replaced whole, expectedUpdatedAt gates the write via optimistic concurrency, and validation refuses introduced problems while returning warnings and removed 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-loaded with the core action, then behavior, replacement semantics, concurrency, and validation in a logical order. Every sentence conveys a distinct, non-redundant rule; no filler despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation with deep nested schema and no output schema, the description covers the destructive/live consequences, merge semantics, concurrency requirement, and validation outcomes. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: it explains that each top-level formSchema key replaces the stored one wholesale against the schema's terser 'The top-level keys to replace; keys left out are kept', and clarifies the origin and enforcement of expectedUpdatedAt. The name parameter is only implied by 'name or 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 ('Change a form's name or schema') and immediately establishes the tool's distinctive semantics (top-level key replacement, optimistic concurrency). An agent can distinguish it from create_form and update_collection_schema 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?
Clearly frames the update-existing-form use case and tells the agent to source expectedUpdatedAt from get_form, plus the constraint to send complete values for the keys being changed. It references create_form's validation for comparison but does not explicitly enumerate when-not to use this tool versus creating or listing forms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_page_metaUpdate page metadataADestructiveInspect
Update a page's SEO metadata: title, description, image (Open Graph image URL), index (whether search engines may index it), and jsonLD structured data. Partial update: fields you provide are changed, omitted fields are preserved. For JSON-LD prefer jsonLDPatch for surgical edits (changing one key cannot drop the rest of the document); use jsonLD only to replace or clear the whole document. Both are validated before saving: the document must be a schema.org node (object with @context and @type), an array of such nodes, or an object with @context and @graph. Does NOT change page content (use save_page_content or save_section_content for that). Metadata has no draft and no history: on a published page the change is live at once, including index=false, which marks the live page noindex.
| Name | Required | Description | Default |
|---|---|---|---|
| image | No | Open Graph image URL | |
| index | No | Whether search engines should index this page | |
| title | No | Page title / meta title | |
| jsonLD | No | Complete JSON-LD document as a JSON string. REPLACES the page's existing structured data. Pass "" to clear it. Mutually exclusive with jsonLDPatch. | |
| pageId | Yes | The page ID | |
| projectId | Yes | The project ID | |
| description | No | Meta description | |
| jsonLDPatch | No | JSON object (as a string) merged into the page's current JSON-LD document (RFC 7396): matching keys are replaced, null deletes a key, arrays are replaced wholesale. Use for surgical edits, e.g. {"image":"https://…"}. Mutually exclusive with jsonLD. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructive=true/openWorld=true; the description goes well beyond by disclosing that metadata has no draft and no history, that changes are live immediately on a published page, and that index=false marks the live page noindex. It also states the validation contract (schema.org node / array / @graph) applied before saving, which is essential risk context 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?
Front-loads the purpose and field list, then layers partial-update semantics, the jsonLD guidance, validation rules, and the no-content/no-draft caveats. Dense and well ordered, though the middle sentences are long enough that a reader must work through them carefully.
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 an 8-parameter destructive mutation with no output schema, the description covers everything an agent needs: scope, partial-update behavior, the jsonLD vs jsonLDPatch decision, validation requirements, irreversibility (no draft/history), and sibling routing. No return-value explanation is required since no output schema exists.
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 real meaning: it explains the jsonLD/jsonLDPatch mutual exclusivity and the failure mode motivating the choice ('changing one key cannot drop the rest of the document'), plus the accepted JSON-LD shapes. It adds little for title/description/image beyond the schema, keeping it short of 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?
Opens with a specific verb+resource ('Update a page's SEO metadata') and enumerates the exact fields touched (title, description, image, index, jsonLD). It explicitly carves out what it does not do ('Does NOT change page content'), routing that to save_page_content/save_section_content, so an agent can separate it from siblings like update_entry or save_page_content.
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 explicit when-to-use guidance for the ambiguous jsonLD vs jsonLDPatch choice ('prefer jsonLDPatch for surgical edits… use jsonLD only to replace or clear the whole document'), states partial-update semantics (provided fields change, omitted preserved), and names the alternative tools for content edits. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_redirectUpdate redirectADestructiveInspect
Update an existing URL redirect. Partial update: the fields you provide are changed; omitted fields are preserved. Redirects have no draft: the change applies on the live site without a publish, usually within minutes. A change that would lead the redirect back to its own source, directly or through other rules, is refused. Moving the source to / (the home page) or the destination to another site needs confirm: true, sent only after the user agreed.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Whether the redirect is active | |
| source | No | Updated source URL path | |
| confirm | No | Set true only after the user confirmed replacing the home page or sending visitors to another site | |
| permanent | No | Whether this is a permanent (301) or temporary (302) redirect | |
| projectId | Yes | The project ID | |
| redirectId | Yes | The redirect ID | |
| description | No | Updated description | |
| destination | No | Updated destination URL path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true): it discloses that changes go live without a publish, that they land 'usually within minutes', that self-referential loops are refused, and that two classes of high-impact edits are gated behind an explicit user-confirmed flag. That is exactly the behavioral context an agent needs for a destructive mutation.
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, front-loaded with the core action and partial-update rule, then escalating to side effects, refusal conditions, and confirmation gating. Every sentence carries information; only the ordering of the confirm rule could be tightened.
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 no output schema, it covers the essential unknowns: immediate live effect, error condition (loop refusal), and the human-in-the-loop gate for home-page and external-destination changes. It omits only secondary details such as how deactivating affects live traffic.
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 real meaning the schema does not: partial-update semantics for all provided fields, and the protocol for confirm (only after the user agreed, tied to the two specific risky changes). It does not explain the interaction between active and permanent, but the added value is genuine.
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 ('Update an existing URL redirect') and immediately clarifies it is a partial update where omitted fields are preserved. This clearly separates it from create_redirect and delete_redirect by name and semantics, though no sibling is named 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?
Gives concrete conditions for the risky path: moving source to / or destination to another site requires confirm: true, and confirm should be sent only after the user agreed. Usage context (live immediately, no publish step) is clear, but there is no guidance about when to update vs. create a new redirect or when to deactivate instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_themeUpdate themeADestructiveInspect
Update theme variables (colors, typography, spacing) and publish them to the live site.
Merge semantics (RFC 7396 JSON Merge Patch):
Fields you send override the server's values.
Fields you omit are preserved unchanged.
To explicitly clear a field, send it as null.
Arrays (spacing, accentScale, grayScale) are REPLACED wholesale: send the full array you want.
Publishing: by default the merged theme is published immediately (live site restyles, page caches purge). Pass publish=false to only stage a draft the user can review and publish from the theme editor. If the theme editor already holds an unpublished draft, the change is layered on that draft, so publishing also publishes it. With publish=false the result's draftVariables is what was saved and variables is what the site still renders.
Call get_theme first to see the current values. Every color value must be a CSS color (a hex value, rgb(), hsl(), oklch() or color(), a CSS color name, or var(--name)); a change with any other color is refused before anything is saved.
Supports appearance, radius, scaling, font (defaultFontFamily, headingFontFamily), color (accent, background, gray, accentScale, grayScale, accentSurface, accentContrast), spacing (array), fontSize, fontWeight, lineHeight, headingLineHeight, letterSpacing, container, icon (style: regular, thin, light, bold, fill or duotone; the style the editor's icon picker, suggestions and new sections use for new icons; existing icons keep theirs and nothing on the live site changes).
| Name | Required | Description | Default |
|---|---|---|---|
| publish | No | Publish after saving so the change is live on the site (default true). false stages a draft only. | |
| themeId | Yes | The theme ID | |
| projectId | Yes | The project ID | |
| variables | Yes | Theme variables to update. Send only the fields you want to change; omitted fields are preserved. Pass nested objects like { color: { accent: '#FF5C00' } } to update specific tokens without affecting others. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructive=true and openWorld=true, and the description goes well beyond them: merge patch semantics, null-to-clear, wholesale array replacement, immediate cache purge on publish, draft layering, and pre-save color validation refusal. This also contextualizes the destructive hint by explaining that omitted fields are preserved.
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 one-line purpose followed by labeled sections for merge semantics and publishing; well organized. Slightly dense, and the long list of supported variable tokens largely restates schema fields, but the structure keeps it usable.
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 explains what draftVariables and variables contain in the result, and covers validation, publishing side effects, and draft interaction. Complete enough for correct invocation of a complex nested 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 100%, so the baseline is 3, but the description adds real meaning: RFC 7396 merge behavior, null-clearing, arrays replaced not merged, publish semantics, valid color formats, and the icon style enum's effect on editor pickers vs existing icons. This is substantially more than the schema 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?
States a specific verb (update) and resource (theme variables: colors, typography, spacing) plus the key side effect (publish to live site). The sibling get_theme is explicitly named as the read counterpart, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call get_theme first to see the current values,' and defines the publish=true vs publish=false branch with the consequence of each. Exclusions and alternatives are stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_assetImport image into assetsADestructiveInspect
Import an image into the project's asset library, optimized. Provide EXACTLY ONE of sourceUrl (an http(s) URL the worker fetches) or base64Data (raw base64 image bytes, requires mimeType). Returns the stored asset { id, name, url, type, metadata }; use the returned url as a section media.src. Asset names are unique within a project, so the stored name gets a short tag from the file's content, and optimized images are stored as .webp: rely on the returned name and url, not the requested filename. There is no replace-in-place: to swap an image, upload a new one and repoint media.src. An Unsplash photo (an images.unsplash.com url from search_stock_images) is NOT copied: pass its url as sourceUrl and its stock.downloadLocation, and the tool only reports the use to Unsplash and returns { url, hotlinked: true } to set as media.src as is.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Desired filename, e.g. 'hero.jpg'. Names are unique within a project: the stored name gets a short content tag and optimization may store it as .webp, so use the returned asset name/url. Ignored for an Unsplash photo. | |
| mimeType | No | Image MIME type, e.g. 'image/jpeg'. Required with base64Data; for sourceUrl it is derived from the response. | |
| optimize | No | Optimize/convert before storing (recommended). Default true. | |
| projectId | Yes | The project ID | |
| sourceUrl | No | Public http(s) URL of the image to import. The worker fetches the bytes. Provide this OR base64Data, not both. Preferred for anything larger than ~5MB. | |
| base64Data | No | Raw base64 image bytes (NOT a data URL). Requires mimeType. Provide this OR sourceUrl, not both. Capped at ~5MB decoded; use sourceUrl for larger images. | |
| downloadLocation | No | For an Unsplash photo from search_stock_images: its stock.downloadLocation. Unsplash asks to be told when one of its photos is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true) by disclosing non-obvious side effects: the stored name gets a content tag and is not the requested filename, images are converted to .webp, names are unique per project, and Unsplash photos are hotlinked rather than copied. It even describes the divergent return shapes ({ id, name, url, ... } vs { url, hotlinked: 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?
Front-loaded with the action, then the source-choice rule, then return usage, then caveats — a sensible priority order with no filler. It repeats the filename/webp caveat that the schema also explains, so it is slightly longer than strictly necessary.
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 specifies both possible return shapes and how to consume them (media.src). Missing pieces are minor: nothing on auth/permissions, error behavior on fetch failure, or the upload_image distinction.
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: it frames the sourceUrl/base64Data pair as mutually exclusive and ties downloadLocation to the Unsplash path and filename to being ignored there. It does not restate size caps, which the schema already carries.
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: importing an image into the project's asset library, with optimization implied. It is clearly distinct from read/manipulation siblings like list_assets or update_asset. However, it never distinguishes itself from the sibling upload_image, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong when/how guidance: exactly one of sourceUrl or base64Data, the Unsplash flow with search_stock_images and downloadLocation, and the explicit 'no replace-in-place — upload new and repoint media.src' rule. The one missing routing cue is when to use this versus the sibling upload_image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageUpload image from the chatADestructiveInspect
Use this when the user has a LOCAL image (pasted into the chat, or a file on their machine) that they want on a page. In chat apps that show views it opens an upload box in the chat where the user drops the image; it uploads straight to the project's media library and returns the asset URL, which you then set as a section media.src. In clients without views (terminal clients such as Claude Code) it returns a one-time curl command that uploads a local file by its path instead. Prefer this over upload_asset for user-supplied local images (a pasted image's bytes never reach you, so you cannot upload it yourself). For an image that already has a public URL, use upload_asset(sourceUrl) instead.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| expiresAt | Yes | |
| projectId | Yes | |
| uploadEndpoint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=true; the description adds substantial context the annotations cannot convey — dual execution modes (view clients open a chat upload box; terminal clients return a one-time curl command), and where the bytes land (project media library, asset URL). It doesn't reconcile why destructiveHint is true for what reads as an additive upload, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operative condition ('LOCAL image… on a page') is front-loaded, then the two client modes, then the routing rule versus upload_asset. Lengthy but every sentence changes an agent decision; 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?
Complete for a one-parameter tool. It covers both runtime branches, what is returned in each (asset URL vs curl command), and the downstream action (setting media.src). An output schema exists, so return-value documentation is a bonus rather than a 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?
Single parameter (projectId) with 100% schema description coverage, so the schema already does the work. The description adds no format or constraint detail beyond it; 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+resource ('upload image') and immediately scopes it: a LOCAL image the user wants on a page. It explicitly separates itself from upload_asset by input type, so an agent can pick between them 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 explicit when-to-use ('user has a LOCAL image… pasted into the chat, or a file on their machine'), and names two alternatives with their selection conditions: upload_asset(sourceUrl) for public URLs, and the terminal-client path where bytes never reach the agent. No inference required.
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.
35 tool updates
- Changed
bind_section_to_collection2 fields changed- added
Input schema / properties / connectionAdded value: +{ + "additionalProperties": {}, + "description": "The mapping, keyed by the section path it fills, e.g. {\"ctx.items\": {\"dataSourcePath\": \"entries\", \"fields\": {\"title.value\": \"<%=entryName%>\"}}}. Omit to keep the section's mapping or have one built.", + "propertyNames": { + "type": "string" + }, + "type": "object" +} - changed
Input schema / properties / idempotencyKey / descriptionPrevious value: -"Stable key for a safe retry: the same key replays the first result instead of applying twice"New value: +"Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key."
- Changed
create_collection2 fields changed- changed
Input schema / properties / hasPages / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / hasPages / descriptionPrevious value: -"Whether to auto-generate a page per entry. Default true."New value: +"Give every entry its own page, laid out by an entry-page template that starts empty and is designed in the dashboard. Default false."
- Changed
create_page1 field changed- added
Input schema / properties / idempotencyKeyAdded value: +{ + "description": "Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key.", + "maxLength": 128, + "type": "string" +}
- Changed
create_redirect1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "Set true only after the user confirmed replacing the home page or sending visitors to another site", + "type": "boolean" +}
- Changed
get_all_page_statuses1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "message": { + "description": "Why there are no statuses, in place of the list", + "type": "string" + }, + "statuses": { + "items": { + "additionalProperties": {}, + "properties": { + "coverageState": { + "type": "string" + }, + "cwvCategory": { + "type": "string" + }, + "indexingState": { + "type": "string" + }, + "lastCrawlTime": { + "type": "string" + }, + "pageId": { + "type": "string" + }, + "performanceScore": { + "type": "number" + }, + "url": { + "type": "string" + }, + "verdict": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "warning": { + "description": "Set when the connected Search Console property does not cover the address the site is served at", + "type": "string" + } + }, + "type": "object" +}
- Changed
get_form_submissions8 fields changed- added
Input schema / properties / includePartialAdded value: +{ + "default": false, + "description": "Also return unfinished submissions (partial: true). Default false.", + "type": "boolean" +} - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / statusAdded value: +{ + "default": "inbox", + "description": "inbox (default) is everything but spam; ok, suspect or spam lists only that kind; all lists every row", + "enum": [ + "inbox", + "ok", + "suspect", + "spam", + "all" + ], + "type": "string" +}
- Changed
get_page_content2 fields changed- added
Input schema / properties / modeAdded value: +{ + "default": "outline", + "description": "outline (default): content without layout settings; full: every field, including cfg and icon markup", + "enum": [ + "outline", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + }, + "latestRevision": { + "additionalProperties": {}, + "properties": { + "headAnchor": { + "type": "string" + }, + "id": { + "type": "string" + }, + "sections": { + "items": { + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_page_revisions2 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 20, + "description": "Number of revisions to return (1 to 100)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Revisions to skip", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +}
- Changed
get_partial_content1 field changed- added
Input schema / properties / modeAdded value: +{ + "default": "outline", + "description": "outline (default): content without layout settings; full: every field, including cfg and icon markup", + "enum": [ + "outline", + "full" + ], + "type": "string" +}
- Added
get_profile - Changed
get_search_performance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "byCountry": { + "items": { + "additionalProperties": {}, + "properties": { + "clicks": { + "type": "number" + }, + "ctr": { + "type": "number" + }, + "impressions": { + "type": "number" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "position": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "byDevice": { + "items": { + "additionalProperties": {}, + "properties": { + "clicks": { + "type": "number" + }, + "ctr": { + "type": "number" + }, + "impressions": { + "type": "number" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "position": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "byPage": { + "items": { + "additionalProperties": {}, + "properties": { + "clicks": { + "type": "number" + }, + "ctr": { + "type": "number" + }, + "impressions": { + "type": "number" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "position": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "byQuery": { + "items": { + "additionalProperties": {}, + "properties": { + "clicks": { + "type": "number" + }, + "ctr": { + "type": "number" + }, + "impressions": { + "type": "number" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "position": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "clicksChange": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "ctrChange": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "dataFreshnessDate": { + "type": "string" + }, + "impressionsChange": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "message": { + "description": "Why there is no data, in place of the data", + "type": "string" + }, + "period": { + "type": "string" + }, + "positionChange": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "totals": { + "additionalProperties": {}, + "properties": { + "clicks": { + "type": "number" + }, + "ctr": { + "type": "number" + }, + "impressions": { + "type": "number" + }, + "position": { + "type": "number" + } + }, + "type": "object" + }, + "warning": { + "description": "Set when the connected Search Console property does not cover the address the site is served at", + "type": "string" + } + }, + "type": "object" +}
- Changed
get_site_analytics1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "counts": { + "additionalProperties": {}, + "properties": { + "avgDuration": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "formatted": { + "type": "string" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "bounceRate": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "pageviews": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + }, + "visits": { + "additionalProperties": {}, + "properties": { + "change": { + "type": "number" + }, + "current": { + "type": "number" + }, + "previous": { + "type": "number" + }, + "trend": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "kpis": { + "description": "Visits and page views per day over the period", + "items": { + "additionalProperties": {}, + "properties": { + "date": { + "type": "string" + }, + "pageviews": { + "type": "number" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "note": { + "description": "Which window the top lists cover, when it is not the chosen period", + "type": "string" + }, + "period": { + "type": "string" + }, + "topBrowsers": { + "items": { + "additionalProperties": {}, + "properties": { + "browser": { + "type": "string" + }, + "hits": { + "type": "number" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "topDevices": { + "items": { + "additionalProperties": {}, + "properties": { + "device": { + "type": "string" + }, + "hits": { + "type": "number" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "topLocations": { + "items": { + "additionalProperties": {}, + "properties": { + "hits": { + "type": "number" + }, + "location": { + "type": "string" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "topPages": { + "items": { + "additionalProperties": {}, + "properties": { + "hits": { + "type": "number" + }, + "pathname": { + "type": "string" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "topSources": { + "items": { + "additionalProperties": {}, + "properties": { + "hits": { + "type": "number" + }, + "referrer": { + "type": "string" + }, + "visits": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
get_theme1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "draftVariables": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "hasUnpublishedDraft": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "variables": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "hasUnpublishedDraft" + ], + "type": "object" +}
- Changed
insert_section7 fields changed- added
Input schema / properties / position / maximumAdded value: +9007199254740991 - added
Input schema / properties / position / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / position / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / section / properties / logicalIdAdded value: +{ + "description": "The section's stable identity from a read; keep it when sending a section back", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / section / properties / uislices / descriptionAdded value: +"One uislice for a 'Uislice' section. A 'Partial' section may send an empty list: it is placed by reference and keeps its own content." - removed
Input schema / properties / section / properties / uislices / minItemsRemoved value: -1 - changed
Input schema / properties / section / requiredPrevious value: -[ - "id", - "type", - "uislices" -]New value: +[ + "id", + "type" +]
- Changed
inspect_url2 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"The full URL to inspect"New value: +"The full http or https URL to inspect" - added
Input schema / properties / url / formatAdded value: +"uri"
- Changed
list_assets10 fields changed- added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / search / descriptionPrevious value: -"Search by asset name or description"New value: +"Find assets by name or description (at most 10 best matches)" - changed
Input schema / properties / tags / descriptionPrevious value: -"Filter by tags"New value: +"Filter by tags (not applied to a search)" - changed
Input schema / properties / type / defaultPrevious value: -""New value: +"image" - changed
Input schema / properties / type / descriptionPrevious value: -"Filter by type (e.g. image, svg, icon)"New value: +"image (default), video or application"
- Changed
list_entries7 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Number of entries to return"New value: +"Number of entries to return (1-100)" - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer"
- Changed
list_forms6 fields changed- added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer"
- Changed
list_pages8 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Number of pages to return"New value: +"Number of pages to return (1 to 100)" - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "pagination": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "results": { + "items": { + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
list_partials2 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Number of partials to return (1 to 100)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Pagination offset", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +}
- Changed
list_section_types1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "sections": { + "items": { + "additionalProperties": {}, + "properties": { + "group": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "type": { + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "sections" + ], + "type": "object" +}
- Changed
publish_page1 field changed- changed
Input schema / properties / revisionId / descriptionPrevious value: -"The revision ID to publish"New value: +"The revision to publish: the latestRevision.id that was reviewed"
- Changed
publish_partial1 field changed- changed
Input schema / properties / revisionId / descriptionPrevious value: -"The revision ID to publish"New value: +"The revision to publish: the latestRevision.id that was reviewed"
- Changed
remove_section1 field changed- changed
Input schema / properties / idempotencyKey / descriptionPrevious value: -"Stable key for a safe retry: the same key replays the first result instead of applying twice"New value: +"Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key."
- Changed
revert_page_revision_to_version6 fields changed- added
Input schema / properties / expectedHeadAnchorAdded value: +{ + "description": "The draft head's headAnchor from get_page_revisions; the undo is refused if the draft changed since", + "type": "string" +} - added
Input schema / properties / pageIdAdded value: +{ + "description": "The page the revision belongs to", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" +} - changed
Input schema / properties / revisionId / descriptionPrevious value: -"The revision ID whose versions to roll back"New value: +"The draft head revision id (isDraftHead in get_page_revisions)" - added
Input schema / properties / saveNumberAdded value: +{ + "description": "Keep the saves up to and including this number (from get_page_revisions saves); newer ones are deleted", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / version / descriptionPrevious value: -"Keep versions up to and including this number; delete all newer ones. 0 keeps none (back to the revision's base state)."New value: +"Older name for saveNumber" - changed
Input schema / requiredPrevious value: -[ - "projectId", - "revisionId", - "version" -]New value: +[ + "projectId", + "pageId", + "revisionId", + "expectedHeadAnchor" +]
- Changed
save_page_content4 fields changed- added
Input schema / properties / sections / items / properties / logicalIdAdded value: +{ + "description": "The section's stable identity from a read; keep it when sending a section back", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / sections / items / properties / uislices / descriptionAdded value: +"One uislice for a 'Uislice' section. A 'Partial' section may send an empty list: it is placed by reference and keeps its own content." - removed
Input schema / properties / sections / items / properties / uislices / minItemsRemoved value: -1 - changed
Input schema / properties / sections / items / requiredPrevious value: -[ - "id", - "type", - "uislices" -]New value: +[ + "id", + "type" +]
- Changed
save_partial_content4 fields changed- added
Input schema / properties / sections / items / properties / logicalIdAdded value: +{ + "description": "The section's stable identity from a read; keep it when sending a section back", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / sections / items / properties / uislices / descriptionAdded value: +"One uislice for a 'Uislice' section. A 'Partial' section may send an empty list: it is placed by reference and keeps its own content." - removed
Input schema / properties / sections / items / properties / uislices / minItemsRemoved value: -1 - changed
Input schema / properties / sections / items / requiredPrevious value: -[ - "id", - "type", - "uislices" -]New value: +[ + "id", + "type" +]
- Changed
save_section_content4 fields changed- added
Input schema / properties / section / properties / logicalIdAdded value: +{ + "description": "The section's stable identity from a read; keep it when sending a section back", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / section / properties / uislices / descriptionAdded value: +"One uislice for a 'Uislice' section. A 'Partial' section may send an empty list: it is placed by reference and keeps its own content." - removed
Input schema / properties / section / properties / uislices / minItemsRemoved value: -1 - changed
Input schema / properties / section / requiredPrevious value: -[ - "id", - "type", - "uislices" -]New value: +[ + "id", + "type" +]
- Changed
search_content3 fields changed- changed
Input schema / properties / entity / descriptionPrevious value: -"Filter by entity type (e.g. 'page', 'entry')"New value: +"Only pages, or only collection entries (entries with their own page are found through their page and marked pageBackedEntry)" - added
Input schema / properties / entity / enumAdded value: +[ + "page", + "entry" +] - added
Input schema / properties / limitAdded value: +{ + "default": 20, + "description": "Most results of each kind, pages and entries (1 to 50, default 20)", + "maximum": 50, + "minimum": 1, + "type": "integer" +}
- Changed
unbind_section_from_collection1 field changed- changed
Input schema / properties / idempotencyKey / descriptionPrevious value: -"Stable key for a safe retry: the same key replays the first result instead of applying twice"New value: +"Stable key for a safe retry: the same key replays the first result instead of applying twice. Reuse a key only for a call that got no answer; after any error, read the page again and use a new key."
- Added
update_asset - Changed
update_collection_schema3 fields changed- added
Input schema / properties / expectedUpdatedAtAdded value: +{ + "description": "updatedAt as read from get_collection (or returned by create_collection or the last update_collection_schema); the save is refused if the collection changed since", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / fieldSchema / items / properties / type / enumPrevious value: -[ - "name", - "slug", - "text", - "html", - "number", - "boolean", - "date", - "image", - "option", - "reference", - "media", - "icon" -]New value: +[ + "name", + "slug", + "text", + "html", + "number", + "checkbox", + "boolean", + "date", + "image", + "media", + "icon", + "option", + "reference", + "related", + "select", + "textarea", + "email", + "url" +] - changed
Input schema / requiredPrevious value: -[ - "projectId", - "collectionId", - "fieldSchema" -]New value: +[ + "projectId", + "collectionId", + "expectedUpdatedAt", + "fieldSchema" +]
- Changed
update_redirect1 field changed- added
Input schema / properties / confirmAdded value: +{ + "description": "Set true only after the user confirmed replacing the home page or sending visitors to another site", + "type": "boolean" +}
- Changed
upload_asset3 fields changed- added
Input schema / properties / base64Data / maxLengthAdded value: +7000000 - added
Input schema / properties / downloadLocationAdded value: +{ + "description": "For an Unsplash photo from search_stock_images: its stock.downloadLocation. Unsplash asks to be told when one of its photos is used.", + "type": "string" +} - changed
Input schema / properties / filename / descriptionPrevious value: -"Desired filename, e.g. 'hero.jpg'. Note: optimization may store it as <name>.webp, so use the returned asset name/url."New value: +"Desired filename, e.g. 'hero.jpg'. Names are unique within a project: the stored name gets a short content tag and optimization may store it as .webp, so use the returned asset name/url. Ignored for an Unsplash photo."
- Changed
upload_image1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "expiresAt": { + "type": "number" + }, + "projectId": { + "type": "string" + }, + "uploadEndpoint": { + "type": "string" + } + }, + "required": [ + "uploadEndpoint", + "projectId", + "expiresAt" + ], + "type": "object" +}
68 tool updates
- First observed
bind_section_to_collection - First observed
create_collection - First observed
create_entry - First observed
create_form - First observed
create_page - First observed
create_redirect - First observed
delete_entry - First observed
delete_page - First observed
delete_redirect - First observed
duplicate_entry - First observed
duplicate_page - First observed
generate_image - First observed
get_ai_referral_analytics - First observed
get_all_page_statuses - First observed
get_collection - First observed
get_entry - First observed
get_form - First observed
get_form_submissions - First observed
get_gsc_connection_status - First observed
get_image_job - First observed
get_imagegen_quota - First observed
get_page - First observed
get_page_content - First observed
get_page_index_status - First observed
get_page_revisions - First observed
get_partial_content - First observed
get_project - First observed
get_search_performance - First observed
get_section_content - First observed
get_section_defaults - First observed
get_site_analytics - First observed
get_theme - First observed
insert_section - First observed
inspect_url - First observed
list_assets - First observed
list_collections - First observed
list_domains - First observed
list_entries - First observed
list_forms - First observed
list_pages - First observed
list_partials - First observed
list_projects - First observed
list_redirects - First observed
list_section_types - First observed
publish_entry - First observed
publish_page - First observed
publish_partial - First observed
remove_section - First observed
reorder_sections - First observed
revert_page_revision - First observed
revert_page_revision_to_version - First observed
save_entry_content - First observed
save_page_content - First observed
save_partial_content - First observed
save_section_content - First observed
search_content - First observed
search_stock_images - First observed
unbind_section_from_collection - First observed
unpublish_page - First observed
unpublish_partial - First observed
update_collection_schema - First observed
update_entry - First observed
update_form_schema - First observed
update_page_meta - First observed
update_redirect - First observed
update_theme - First observed
upload_asset - First observed
upload_image
Publisher details
- Operator
- Pixelesq, Inc. · Publisher source
- Operator website
- https://www.pixelesq.com
- Vendor relationship
- First-party
- Documentation
- https://www.pixelesq.com/help/connect-claude
- Trust center
- Not available
- Restrictions
- Requires a Pixelesq account with at least one project. · Publisher source
Related MCP Connectors
Build, publish, and grow SEO-ready websites just by chatting with your AI assistant.
Build and edit landing pages and websites from your AI assistant, and pull how they are performing.
Build, version, review, and export websites, web apps, and games from a conversation.
Build a hosted website by chatting. Snapshots, forms, analytics. Hand off the dashboard. Walk away.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to build, edit, preview, and publish websites through natural language, including managing pages, designs, products, and site publishing.MIT
Spacefast MCPofficial
AlicenseNot gradedqualityBmaintenanceEnables users to build, publish, share, and manage websites, dashboards, reports, and small web tools through chat, including updating content and design, managing access and custom domains, and restoring deployments.7MIT
SiteCTRLofficial
AlicenseNot gradedqualityCmaintenancesitectrl turns a plain-language description into a real, hosted, live website — not a mockup. Your AI can ask sitectrl's builder to do it (create_site), or write the code itself and push the files (write_site_files + publish_site). Every site ships with hosting, SSL, working contact forms, and private built-in analytics; domains and email connect in-product.MIT- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create and iteratively edit browser games, web apps, and websites from natural-language prompts, track builds, preview results, and request publication.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.