Skip to main content
Glama

Read site design

templates_read
Read-onlyIdempotent

Reads design data of the active site: templates and their variables, template backups, menus, mail forms, site pages and the template guides. Does not change anything.

Input Schema

NameRequiredDescriptionDefault
pageNoList page, from 1.
actionYesOperation to run. Each oneOf entry describes one action and lists its parameters.
detailNoRecord form of a paged list. brief (default): for site pages id, title, status, parent id, public URL, last change and a plain-text excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.
offsetNoRecords to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.
contentNoGlobal block HTML (gblock_create) or full template body to check (validate_template; html_content is accepted too).
menu_idNoMenu id from menu_list.
page_idNoSite page id. Page 1 cannot be deleted.
per_pageNoRecords per page: 1-50, 20 by default, larger values count as 50.
module_idNoNumeric module id of the template, from list_modules.
page_pageNopage_list: the earlier name of page; page wins when both are set.
code_pasteNoReplacement for code_search; an empty string deletes the fragment.
code_searchNoExact template fragment to find.
template_idNoTemplate id within the module, from list_modules.
html_contentNoFull template HTML. For small edits use patch_template.
mail_form_idNoMail form id from mail_list_forms.
page_per_pageNopage_list: the earlier name of per_page; per_page wins when both are set.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / action / oneOf
      Previous value: -[
      -  {
      -    "const": "list_modules",
      -    "description": "Lists the modules that have templates, with their template ids. Optional: offset."
      -  },
      -  {
      -    "const": "get_variables",
      -    "description": "Returns a template together with the variables available in it. Required: module_id, template_id."
      -  },
      -  {
      -    "const": "read_template",
      -    "description": "Returns the template code and its variables. Required: module_id, template_id."
      -  },
      -  {
      -    "const": "validate_template",
      -    "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste."
      -  },
      -  {
      -    "const": "list_backups",
      -    "description": "Lists template backups. Optional: offset."
      -  },
      -  {
      -    "const": "get_reference",
      -    "description": "Returns the template variables reference (markdown)."
      -  },
      -  {
      -    "const": "get_guide",
      -    "description": "Returns the template editing guide (markdown)."
      -  },
      -  {
      -    "const": "get_backup_guide",
      -    "description": "Returns the template backup guide (markdown)."
      -  },
      -  {
      -    "const": "menu_list",
      -    "description": "Lists site menus. Optional: offset."
      -  },
      -  {
      -    "const": "menu_get",
      -    "description": "Returns one menu with its items. Required: menu_id."
      -  },
      -  {
      -    "const": "mail_list_forms",
      -    "description": "Lists mail forms. Optional: offset."
      -  },
      -  {
      -    "const": "mail_get_form",
      -    "description": "Returns one mail form. Required: mail_form_id."
      -  },
      -  {
      -    "const": "mail_list_fields",
      -    "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset."
      -  },
      -  {
      -    "const": "mail_get_template",
      -    "description": "Returns the notification email template of a mail form. Required: mail_form_id."
      -  },
      -  {
      -    "const": "page_list",
      -    "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page."
      -  },
      -  {
      -    "const": "page_get",
      -    "description": "Returns one site page. Required: page_id."
      -  }
      -]New value: +[
      +  {
      +    "const": "list_modules",
      +    "description": "Lists the modules that have templates, with their template ids. Optional: offset."
      +  },
      +  {
      +    "const": "get_variables",
      +    "description": "Returns a template together with the variables available in it. Required: module_id, template_id."
      +  },
      +  {
      +    "const": "read_template",
      +    "description": "Returns the template code and its variables. Required: module_id, template_id."
      +  },
      +  {
      +    "const": "validate_template",
      +    "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id, content or html_content or code_search. Optional: code_paste."
      +  },
      +  {
      +    "const": "list_backups",
      +    "description": "Lists template backups. Optional: offset."
      +  },
      +  {
      +    "const": "get_reference",
      +    "description": "Returns the template variables reference (markdown)."
      +  },
      +  {
      +    "const": "get_guide",
      +    "description": "Returns the template editing guide (markdown)."
      +  },
      +  {
      +    "const": "get_backup_guide",
      +    "description": "Returns the template backup guide (markdown)."
      +  },
      +  {
      +    "const": "menu_list",
      +    "description": "Lists site menus. Optional: offset."
      +  },
      +  {
      +    "const": "menu_get",
      +    "description": "Returns one menu with its items. Required: menu_id."
      +  },
      +  {
      +    "const": "mail_list_forms",
      +    "description": "Lists mail forms. Optional: offset."
      +  },
      +  {
      +    "const": "mail_get_form",
      +    "description": "Returns one mail form. Required: mail_form_id."
      +  },
      +  {
      +    "const": "mail_list_fields",
      +    "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset."
      +  },
      +  {
      +    "const": "mail_get_template",
      +    "description": "Returns the notification email template of a mail form. Required: mail_form_id."
      +  },
      +  {
      +    "const": "page_list",
      +    "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page."
      +  },
      +  {
      +    "const": "page_get",
      +    "description": "Returns one site page. Required: page_id."
      +  }
      +]
  2. Changed7 schema fields changed
    • changedInput schema / properties / action / oneOf
      Previous value: -[
      -  {
      -    "const": "list_modules",
      -    "description": "Lists the modules that have templates, with their template ids."
      -  },
      -  {
      -    "const": "get_variables",
      -    "description": "Returns a template together with the variables available in it. Required: module_id, template_id."
      -  },
      -  {
      -    "const": "read_template",
      -    "description": "Returns the template code and its variables. Required: module_id, template_id."
      -  },
      -  {
      -    "const": "validate_template",
      -    "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste."
      -  },
      -  {
      -    "const": "list_backups",
      -    "description": "Lists template backups."
      -  },
      -  {
      -    "const": "get_reference",
      -    "description": "Returns the template variables reference (markdown)."
      -  },
      -  {
      -    "const": "get_guide",
      -    "description": "Returns the template editing guide (markdown)."
      -  },
      -  {
      -    "const": "get_backup_guide",
      -    "description": "Returns the template backup guide (markdown)."
      -  },
      -  {
      -    "const": "menu_list",
      -    "description": "Lists site menus."
      -  },
      -  {
      -    "const": "menu_get",
      -    "description": "Returns one menu with its items. Required: menu_id."
      -  },
      -  {
      -    "const": "mail_list_forms",
      -    "description": "Lists mail forms."
      -  },
      -  {
      -    "const": "mail_get_form",
      -    "description": "Returns one mail form. Required: mail_form_id."
      -  },
      -  {
      -    "const": "mail_list_fields",
      -    "description": "Lists the fields of a mail form. Required: mail_form_id."
      -  },
      -  {
      -    "const": "mail_get_template",
      -    "description": "Returns the notification email template of a mail form. Required: mail_form_id."
      -  },
      -  {
      -    "const": "page_list",
      -    "description": "Lists site pages. Optional: page_page, page_per_page."
      -  },
      -  {
      -    "const": "page_get",
      -    "description": "Returns one site page. Required: page_id."
      -  }
      -]New value: +[
      +  {
      +    "const": "list_modules",
      +    "description": "Lists the modules that have templates, with their template ids. Optional: offset."
      +  },
      +  {
      +    "const": "get_variables",
      +    "description": "Returns a template together with the variables available in it. Required: module_id, template_id."
      +  },
      +  {
      +    "const": "read_template",
      +    "description": "Returns the template code and its variables. Required: module_id, template_id."
      +  },
      +  {
      +    "const": "validate_template",
      +    "description": "Checks a full template body (content or html_content) or a code_search/code_paste patch with the same rules as a save. Nothing is saved and no backup is made. Required: module_id, template_id. Optional: content, html_content, code_search, code_paste."
      +  },
      +  {
      +    "const": "list_backups",
      +    "description": "Lists template backups. Optional: offset."
      +  },
      +  {
      +    "const": "get_reference",
      +    "description": "Returns the template variables reference (markdown)."
      +  },
      +  {
      +    "const": "get_guide",
      +    "description": "Returns the template editing guide (markdown)."
      +  },
      +  {
      +    "const": "get_backup_guide",
      +    "description": "Returns the template backup guide (markdown)."
      +  },
      +  {
      +    "const": "menu_list",
      +    "description": "Lists site menus. Optional: offset."
      +  },
      +  {
      +    "const": "menu_get",
      +    "description": "Returns one menu with its items. Required: menu_id."
      +  },
      +  {
      +    "const": "mail_list_forms",
      +    "description": "Lists mail forms. Optional: offset."
      +  },
      +  {
      +    "const": "mail_get_form",
      +    "description": "Returns one mail form. Required: mail_form_id."
      +  },
      +  {
      +    "const": "mail_list_fields",
      +    "description": "Lists the fields of a mail form. Required: mail_form_id. Optional: offset."
      +  },
      +  {
      +    "const": "mail_get_template",
      +    "description": "Returns the notification email template of a mail form. Required: mail_form_id."
      +  },
      +  {
      +    "const": "page_list",
      +    "description": "Lists site pages a page at a time. Brief pages by default, without their content; detail=full gives complete pages, page_get one complete page. The reply has page, per_page, total, has_more, truncated and next. Optional: page, per_page, offset, detail, page_page, page_per_page."
      +  },
      +  {
      +    "const": "page_get",
      +    "description": "Returns one site page. Required: page_id."
      +  }
      +]
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "Record form of a paged list. brief (default): for site pages id, title, status, parent id, public URL, last change and a plain-text excerpt up to 200 characters. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.",
      +  "enum": [
      +    "brief",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.",
      +  "type": "number"
      +}
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "List page, from 1.",
      +  "type": "number"
      +}
    • changedInput schema / properties / page_page / description
      Previous value: -"Page number of the page list."New value: +"page_list: the earlier name of page; page wins when both are set."
    • changedInput schema / properties / page_per_page / description
      Previous value: -"Page size of the page list."New value: +"page_list: the earlier name of per_page; per_page wins when both are set."
    • addedInput schema / properties / per_page
      Added value: +{
      +  "description": "Records per page: 1-50, 20 by default, larger values count as 50.",
      +  "type": "number"
      +}
  3. Added

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint=false and idempotentHint, and "Does not change anything" merely restates that safety profile. No additional behavioral context (pagination/size limits, that validate_template performs no save, that 30 KB list truncation occurs) appears in the description — that detail lives only in the schema.

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

Conciseness5/5

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

Two sentences, front-loaded with the resource scope and closed with the side-effect guarantee. Nothing is padded and the reader learns the domain in the first clause.

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

Completeness4/5

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

For a sixteen-action multiplexer the description correctly identifies the breadth of coverage, and the oneOf schema entries carry the per-action contracts. What is missing is only the connective guidance (which sibling read tool to prefer, site-selection prerequisite), so it is close to sufficient.

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

Parameters3/5

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

The description adds no parameter meaning of its own; all sixteen parameters, including the action enum and its per-action requirements, are documented at 100% coverage in the schema. Baseline 3 applies since the schema does all the work.

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

Purpose4/5

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

A specific verb ("Reads") plus a concrete resource set: templates, backups, menus, mail forms, site pages, guides. The enumeration makes the tool's coverage unambiguous and clearly separates it from templates_write/templates_delete. It stops short of differentiating from adjacent read tools such as modules_read or tmaker_read, which also touch design data.

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

Usage Guidelines3/5

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

Usage is only implied by the enumeration of resource families; there is no explicit statement of when to pick this over modules_read or tmaker_read, nor any prerequisite (e.g. site must be selected/active). The 'active site' phrase hints at a required context but doesn't state it as a condition.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.