Skip to main content
Glama

Mark page published

mark_page_published

Record that a page is live at a URL, for pages published outside a connected CMS. The page locks, and Cleotic compares answers to its target questions from that day. Free.

Input Schema

NameRequiredDescriptionDefault
urlYesThe live page's address.
brandYesBrand or study: its ID from list_brands, or its exact name. A partial name is refused.
page_idYesPage ID from list_pages.
idempotency_keyYesA unique key for this intended action. Reuse it with identical arguments when retrying: the write is not made again, and the reply is the first call's resource as saved (replayed: true) with current status; read tools show the resource's current state. Use a new key for another action.

Output Schema

NameRequiredDescriptionDefault
dataYes
generated_atYesRFC 3339 time the response was made.
schema_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / data / properties / cost / properties / content_generations / description
      Previous value: -"Content Studio generations used from the plan's allowance."New value: +"Content Studio pages or outreach drafts used from the plan's allowance."
    • addedOutput schema / properties / data / properties / resource / properties / agent_state
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / data / properties / resource / properties / live_url
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / data / properties / resource / properties / plan_status
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / data / properties / resource / properties / published_url
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / data / properties / resource / properties / version
      Added value: +{
      +  "type": "integer"
      +}
    • changedOutput schema / properties / data / properties / resource / required
      Previous value: -[
      -  "page_id",
      -  "title",
      -  "status",
      -  "plan_status",
      -  "published_url"
      -]New value: +[
      +  "page_id",
      +  "title",
      +  "status",
      +  "agent_state",
      +  "version",
      +  "live_url"
      +]
  2. Changed6 schema fields changed
    • changedInput schema / properties / brand / description
      Previous value: -"Brand or study: its ID from list_brands, or its name."New value: +"Brand or study: its ID from list_brands, or its exact name. A partial name is refused."
    • changedInput schema / properties / idempotency_key / description
      Previous value: -"A unique key for this intended action. Reuse it with identical arguments when retrying; use a new key for another action."New value: +"A unique key for this intended action. Reuse it with identical arguments when retrying: the write is not made again, and the reply is the first call's resource as saved (replayed: true) with current status; read tools show the resource's current state. Use a new key for another action."
    • changedOutput schema / properties / data / properties / brand / description
      Previous value: -"The brand written to; null for brand setup before approval."New value: +"The brand written to; null for start_brand_setup, which has no brand yet."
    • changedOutput schema / properties / data / properties / cost / properties / readiness_scans / description
      Previous value: -"Site readiness scans used from the plan's monthly allowance."New value: +"Full site readiness scans started; counted for the month, with no monthly allowance."
    • addedOutput schema / properties / data / properties / created_at
      Added value: +{
      +  "description": "Set on a replay: when the original call was made.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / data / properties / replayed / description
      Previous value: -"True when this repeats an earlier call with the same idempotency_key."New value: +"True when this repeats an earlier call with the same idempotency_key. The write is not made again: resource is as first saved, status, progress and message are current, and the read tools show the resource's current state."
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "data": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "brand": {
      +          "additionalProperties": false,
      +          "description": "The brand written to; null for brand setup before approval.",
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "The brand's website, or empty when none is set.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "name",
      +            "url"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "cost": {
      +          "additionalProperties": false,
      +          "description": "What the write used from the plan's capacity, allowances and model budget; null when nothing.",
      +          "properties": {
      +            "content_generations": {
      +              "description": "Content Studio generations used from the plan's allowance.",
      +              "type": "integer"
      +            },
      +            "model_budget": {
      +              "description": "Whether the call spends the organisation's AI model budget.",
      +              "type": "boolean"
      +            },
      +            "note": {
      +              "type": "string"
      +            },
      +            "prompt_capacity": {
      +              "description": "Active prompts added against the plan's prompt limit.",
      +              "type": "integer"
      +            },
      +            "queued_model_runs": {
      +              "description": "Answer collections queued; each uses model budget.",
      +              "type": "integer"
      +            },
      +            "readiness_checks": {
      +              "description": "Readiness re-checks used from the plan's monthly allowance.",
      +              "type": "integer"
      +            },
      +            "readiness_scans": {
      +              "description": "Site readiness scans used from the plan's monthly allowance.",
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "model_budget",
      +            "content_generations",
      +            "readiness_scans",
      +            "readiness_checks",
      +            "prompt_capacity",
      +            "queued_model_runs",
      +            "note"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "message": {
      +          "description": "What happens next.",
      +          "type": "string"
      +        },
      +        "operation_id": {
      +          "description": "Pass to get_operation to follow the write.",
      +          "type": "string"
      +        },
      +        "poll_after_seconds": {
      +          "description": "While pending, how long to wait before calling get_operation; 0 otherwise.",
      +          "type": "integer"
      +        },
      +        "progress": {
      +          "additionalProperties": false,
      +          "description": "Set while the work runs.",
      +          "properties": {
      +            "done": {
      +              "type": "integer"
      +            },
      +            "message": {
      +              "type": "string"
      +            },
      +            "stage": {
      +              "type": "string"
      +            },
      +            "total": {
      +              "description": "0 when the total is not known.",
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "stage",
      +            "done",
      +            "total",
      +            "message"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "replayed": {
      +          "description": "True when this repeats an earlier call with the same idempotency_key.",
      +          "type": "boolean"
      +        },
      +        "resource": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "page_id": {
      +              "type": "string"
      +            },
      +            "plan_status": {
      +              "type": "string"
      +            },
      +            "published_url": {
      +              "type": "string"
      +            },
      +            "status": {
      +              "type": "string"
      +            },
      +            "title": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "page_id",
      +            "title",
      +            "status",
      +            "plan_status",
      +            "published_url"
      +          ],
      +          "type": "object"
      +        },
      +        "status": {
      +          "description": "completed: done. pending: saved, with work still running; call get_operation after poll_after_seconds. failed: the work after the write failed; message says why.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "operation_id",
      +        "status",
      +        "replayed",
      +        "brand",
      +        "resource",
      +        "progress",
      +        "poll_after_seconds",
      +        "message",
      +        "cost"
      +      ],
      +      "type": "object"
      +    },
      +    "generated_at": {
      +      "description": "RFC 3339 time the response was made.",
      +      "type": "string"
      +    },
      +    "schema_version": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "schema_version",
      +    "generated_at",
      +    "data"
      +  ],
      +  "type": "object"
      +}
  4. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, not destructive, open-world), and the description adds genuinely new behavior: the page becomes locked, Cleotic re-evaluates its target questions as of that day, and the call is free. It omits retry/idempotency semantics even though a required idempotency_key implies they matter.

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?

Three short sentences with no filler; the scope constraint and the side effects are front-loaded before the pricing note.

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?

With a full schema, an output schema, and annotations present, the description covers the essentials: what it records, the eligibility scope, and the locking/comparison side effects. The residual gap is that it never addresses the idempotency_key's retry contract, which is the one non-obvious field on a write tool.

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?

Schema description coverage is 100%, so all four parameters, including the detailed idempotency_key semantics, are already documented in the schema. The description adds no parameter-level meaning beyond that, which is the baseline case.

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?

States a specific verb and resource ('Record that a page is live at a URL') and immediately scopes it to 'pages published outside a connected CMS', which cleanly separates it from the sibling send_page_to_cms.

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

Usage Guidelines4/5

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

The qualifier 'for pages published outside a connected CMS' tells the agent the condition under which this tool applies rather than the CMS-sync alternative. It stops short of naming the alternative tool explicitly or stating exclusions for already-published pages.

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