Skip to main content
Glama

Set one page's SEO title, description, keywords and structured data

update_page_seo
Idempotent

Set the SEO metadata for a SINGLE page: its title (the browser-tab text and search headline for that page), description, target keywords, social image, canonical URL, the noindex/nofollow flags, and its JSON-LD structured_data ({ "schemas": [ { "@type": "…", … } ] }, which replaces the schema Mondovo generates for that page; null goes back to the generated one). Only the fields you supply change; null clears a field. For a blog post or other collection item, pass seo to add_collection_item / update_collection_item instead — those pages are not in the design's files. This is the PER-PAGE half of SEO and it WINS over the site-wide default — use update_site_settings for the site-wide title/description that pages fall back to. Like the site settings, none of this is in the site's code: Mondovo writes it into the page's head at publish, so refine_site cannot set it. Call get_site first if you need the list of page slugs; a wrong slug comes back with the real ones attached. Publish the site for the change to reach visitors.

Input Schema

NameRequiredDescriptionDefault
slugYesSlug of the page to update, e.g. "/about" or "/" for the homepage
titleNoThis page's browser-tab title and search headline. Aim for 50-60 characters.
site_idYesThe site the page belongs to
keywordsNoTarget keywords for this page, most important first.
no_indexNotrue asks search engines not to index this page.
no_followNotrue asks search engines not to follow links on this page.
user_goalNoOptional: the user's goal behind this call, in one short sentence of plain words (e.g. "add a page so customers can book tables"). No names, emails or other personal details.
descriptionNoThis page's meta description. Aim for 150-160 characters.
og_image_urlNoSocial sharing image for this page, overriding the site default.
variation_idNoDesign to edit, from list_variations. Defaults to the active design.
canonical_urlNoCanonical URL, when this page duplicates another.
structured_dataNoThis page's JSON-LD as { "schemas": [ { "@type": "BlogPosting", … }, { "@type": "BreadcrumbList", … } ] }. Replaces the schema Mondovo would otherwise generate for the page, so include every schema it should carry. "@context" is added when absent. Max 50 KB. null clears it (back to the generated schema).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / user_goal
      Added value: +{
      +  "description": "Optional: the user's goal behind this call, in one short sentence of plain words (e.g. \"add a page so customers can book tables\"). No names, emails or other personal details.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / structured_data
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "description": "This page's JSON-LD as { \"schemas\": [ { \"@type\": \"BlogPosting\", … }, { \"@type\": \"BreadcrumbList\", … } ] }. Replaces the schema Mondovo would otherwise generate for the page, so include every schema it should carry. \"@context\" is added when absent. Max 50 KB. null clears it (back to the generated schema).",
      +      "properties": {
      +        "schemas": {
      +          "items": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "@type": {
      +                "anyOf": [
      +                  {
      +                    "minLength": 1,
      +                    "type": "string"
      +                  },
      +                  {
      +                    "items": {
      +                      "minLength": 1,
      +                      "type": "string"
      +                    },
      +                    "minItems": 1,
      +                    "type": "array"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "@type"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 20,
      +          "minItems": 1,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "schemas"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "This page's JSON-LD as { \"schemas\": [ { \"@type\": \"BlogPosting\", … }, { \"@type\": \"BreadcrumbList\", … } ] }. Replaces the schema Mondovo would otherwise generate for the page, so include every schema it should carry. \"@context\" is added when absent. Max 50 KB. null clears it (back to the generated schema)."
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (idempotent, non-destructive), it discloses patch semantics ('Only the fields you supply change; null clears a field'), the destructive-by-overwrite behavior of structured_data (it replaces Mondovo's generated schema, so include every schema), the error behavior on a wrong slug, and the fact that changes only reach visitors after publish. No contradiction with readOnlyHint=false.

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

Conciseness4/5

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

Front-loaded with the core action and field list, then routing and caveats in descending priority. Every sentence carries information, though the middle section is dense and parenthetical-heavy for a tool whose schema already names the fields.

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

Completeness5/5

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

For a 12-parameter mutation with no output schema, the description covers selection, alternatives, partial-update semantics, error handling, and the publish step — everything an agent needs to call it correctly and to know the change is not yet live.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description still adds value by explaining what each field means in context — title as browser-tab text and search headline, og_image_url overriding the site default, canonical_url for duplicate pages, and the replace/restore semantics of structured_data that the schema states only tersely. It does not explain variation_id or user_goal beyond the schema.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'Set the SEO metadata for a SINGLE page', then enumerates the exact fields (title, description, keywords, social image, canonical, noindex/nofollow, structured_data). It explicitly separates itself from update_site_settings (site-wide fallback) and from the collection-item tools, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit alternatives and the conditions that select them: use update_site_settings for site-wide defaults, use add_collection_item/update_collection_item for blog posts and collection items because 'those pages are not in the design's files'. It also names the prerequisite (call get_site for slugs) and the follow-up (publish the site for the change to reach visitors).

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.

Resources