Skip to main content
Glama
vuluu2k

WebCake Storefront MCP

by vuluu2k

update_article

Modify a blog article by passing only the fields to change; updating the title regenerates the slug, so provide a custom slug in the same call when needed.

Instructions

Update a blog article. Only the fields you pass are changed — each one becomes a command in the same dashboard pipeline create_article uses. NOTE: renaming regenerates the slug, so pass slug in the SAME call if you want a custom one (it is applied after the rename).

Input Schema

NameRequiredDescriptionDefault
idYesArticle ID
seoNoSEO settings to change; other existing SEO tags are kept. Pass "" to clear a field.
nameNoNew title (regenerates the slug unless slug is also passed)
slugNoNew custom slug
tagsNoArticle TAG IDs (uuids from the blog tag list) — not free text
imagesNoHosted image URLs; the first is the cover image
contentNoNew HTML content (replaces the old content)
summaryNoNew summary / excerpt
is_hiddenNoHide from public
category_idsNoBlog category IDs to file the post under (added, existing ones are kept)
published_atNoPublish date, ISO/naive datetime (render_inserted_at)
remove_category_idsNoBlog category IDs to unfile the post from

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.34.1
    • addedInput schema / properties / seo
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "SEO settings to change; other existing SEO tags are kept. Pass \"\" to clear a field.",
      +  "properties": {
      +    "canonical": {
      +      "description": "Canonical URL (<link rel=canonical>)",
      +      "type": "string"
      +    },
      +    "custom_tags": {
      +      "description": "Extra tags (\"Thẻ bổ sung\"), e.g. { \"type\": \"meta\", \"props\": { \"name\": \"author\", \"content\": \"Togi\" } }. Replaces a tag with the same name/property/rel.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "props": {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "type": {
      +            "default": "meta",
      +            "enum": [
      +              "meta",
      +              "link"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "props"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "meta_description": {
      +      "description": "Meta description (~155 chars)",
      +      "type": "string"
      +    },
      +    "og_description": {
      +      "description": "Social share description (og:description)",
      +      "type": "string"
      +    },
      +    "og_image": {
      +      "description": "Social share image URL (og:image), must be hosted",
      +      "type": "string"
      +    },
      +    "og_site_name": {
      +      "description": "og:site_name",
      +      "type": "string"
      +    },
      +    "og_title": {
      +      "description": "Social share title (og:title)",
      +      "type": "string"
      +    },
      +    "og_type": {
      +      "description": "og:type, e.g. article / product",
      +      "type": "string"
      +    },
      +    "og_url": {
      +      "description": "og:url",
      +      "type": "string"
      +    },
      +    "page_keywords": {
      +      "description": "Comma-separated keywords",
      +      "type": "string"
      +    },
      +    "page_title": {
      +      "description": "Title tag (~60 chars)",
      +      "type": "string"
      +    },
      +    "remove_tags": {
      +      "description": "Remove tags by name/property/rel, e.g. [\"author\", \"og:url\"]",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "robots": {
      +      "description": "Robots meta, comma+space separated, e.g. \"noindex, nofollow\" or \"max-snippet:-1, max-image-preview:large\"",
      +      "type": "string"
      +    },
      +    "structured_data": {
      +      "description": "Structured data markup (JSON-LD). REPLACES all existing markups; [] removes them.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "json": {
      +            "description": "JSON-LD object as a string, without <script>",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "Display name",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "json"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed10 schema fields changedv1.31.10
    • removedInput schema / properties / category_id
      Removed value: -{
      -  "description": "Category ID",
      -  "type": "string"
      -}
    • addedInput schema / properties / category_ids
      Added value: +{
      +  "description": "Blog category IDs to file the post under (added, existing ones are kept)",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / content / description
      Previous value: -"New HTML content"New value: +"New HTML content (replaces the old content)"
    • addedInput schema / properties / images
      Added value: +{
      +  "description": "Hosted image URLs; the first is the cover image",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / name / description
      Previous value: -"New title"New value: +"New title (regenerates the slug unless slug is also passed)"
    • addedInput schema / properties / published_at
      Added value: +{
      +  "description": "Publish date, ISO/naive datetime (render_inserted_at)",
      +  "type": "string"
      +}
    • addedInput schema / properties / remove_category_ids
      Added value: +{
      +  "description": "Blog category IDs to unfile the post from",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / slug / description
      Previous value: -"New slug"New value: +"New custom slug"
    • changedInput schema / properties / summary / description
      Previous value: -"New summary"New value: +"New summary / excerpt"
    • changedInput schema / properties / tags / description
      Previous value: -"Tags"New value: +"Article TAG IDs (uuids from the blog tag list) — not free text"
  3. First observedv1.31.8

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, so the description carries most of the burden and does it well: it discloses the partial-mutation model, ties each field to a create_article pipeline command, and flags that renaming regenerates the slug with ordering semantics for the slug param. It stops short of auth, reversibility, or failure behavior, keeping it out of 5 territory.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, the mutation contract follows, and the slug caveat is clearly marked as a NOTE. Three sentences with little waste; the 'dashboard pipeline create_article uses' clause is slightly implementation-flavored but still earns its place.

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

Completeness4/5

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

For a 12-parameter, nested mutating tool with no output schema and only a readOnlyHint annotation, the description covers the one non-obvious behavior an agent could get wrong (rename/slug ordering) and the partial-update model. Auth requirements and error/rollback behavior are unaddressed, but the fully-described schema carries the remainder.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds the cross-parameter ordering rule ('applied after the rename') that the slug schema field does not state, plus a global 'only passed fields change' rule spanning all 12 params. That is meaningful semantics beyond the per-field schema text.

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

Purpose4/5

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

States a specific verb and resource ('Update a blog article') that is easy to separate from list_articles, get_article, create_article, and delete_article by name. It references the create_article pipeline for context but never explicitly says how to choose between this and its siblings, so it lands at clear-but-undifferentiated rather than a 5.

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

Usage Guidelines3/5

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

The partial-update contract ('Only the fields you pass are changed') is genuinely useful usage guidance, and the slug note is a real edge case. However, there is no explicit when-to-use versus create_article / delete_article, and no stated prerequisites or exclusions, so usage is implied rather than spelled out.

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

Deploy Server

Other Tools